Moim zdaniem klauzula WHERE będzie powolna ze względu na zaangażowaną matematykę, a użycie funkcji w klauzuli WHERE uniemożliwi bazie danych użycie indeksu do przyspieszenia zapytania - w efekcie zbadasz każdą restaurację w bazy danych i wykonuj matematykę wielkiego koła w każdym rzędzie, za każdym razem, gdy tworzysz zapytanie.
Osobiście obliczyłbym współrzędne TopLeft i BottomRight kwadratu (który trzeba tylko obliczyć przy użyciu Pitagorasa) o bokach równych poszukiwanemu zakresowi, a następnie wykonałbym bardziej skomplikowany test klauzuli WHERE na mniejszym podzbiorze rekordy mieszczące się w tym kwadracie szerokości/długości.
Z indeksem długości i szerokości geograficznej w bazie danych zapytanie
WHERE MyLat >= @MinLat AND MyLat <= @MaxLat AND MyLong >= @MinLong AND MyLong <= @MaxLong
powinien być bardzo wydajny
(Proszę zauważyć, że nie znam się konkretnie na MySQL, tylko o MS SQL)