En mi opinión, la cláusula WHERE será lenta debido a las matemáticas involucradas, y el uso de funciones en la cláusula WHERE evitará que la base de datos use un índice para acelerar la consulta, por lo que, en efecto, examinará todos los restaurantes en el base de datos y realice las matemáticas del gran círculo en cada fila, cada vez que realice una consulta.
Personalmente, calcularía las coordenadas superior izquierda e inferior derecha de un cuadrado (que solo necesita calcularse crudamente usando Pitágoras) con lados iguales al rango que está buscando, y luego realizaría la prueba de la cláusula WHERE más complicada en el subconjunto más pequeño de registros que están dentro de ese cuadrado Lat/Long.
Con un índice de latitud y longitud en la base de datos, la consulta
WHERE MyLat >= @MinLat AND MyLat <= @MaxLat AND MyLong >= @MinLong AND MyLong <= @MaxLong
debe ser muy eficiente
(Tenga en cuenta que no tengo conocimiento de MySQL específicamente, solo de MS SQL)