A mio parere, la clausola WHERE sarà lenta a causa della matematica coinvolta e l'uso delle funzioni nella clausola WHERE impedirà al database di utilizzare un indice per accelerare la query - quindi, in effetti, esaminerai ogni ristorante nel database ed esegui i calcoli del grande cerchio su ogni riga, ogni volta che esegui una query.
Personalmente calcolerei le coordinate TopLeft e BottomRight di un quadrato (che deve essere calcolato solo crudamente usando Pitagora) con lati uguali all'intervallo che stai cercando, quindi eseguirei il più complicato test della clausola WHERE sul sottoinsieme più piccolo di record che si trovano all'interno di quel quadrato Lat/Long.
Con un indice su Lat &Long nel database la query
WHERE MyLat >= @MinLat AND MyLat <= @MaxLat AND MyLong >= @MinLong AND MyLong <= @MaxLong
dovrebbe essere molto efficiente
(Si prega di notare che non ho alcuna conoscenza di MySQL in particolare, solo di MS SQL)