Calcular a distância é bastante caro computacionalmente, como outros já disseram. Retornar grandes conjuntos de dados também não é uma boa ideia - especialmente considerando que o PHP não é tão bom em desempenho.
Eu usaria uma heurística, como aproximar a distância com adição e subtração simples.
Basta pesquisar o banco de dados com incidentes dentro desse intervalo (efetivamente um quadrado, em vez de um círculo), e então você pode trabalhar com PHP.
EDITAR :Aqui está uma alternativa; uma aproximação que é muito menos dispendiosa computacionalmente:
Distância aproximada em milhas:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Você pode melhorar a precisão deste cálculo de distância aproximada adicionando a função matemática do cosseno:
Distância aproximada melhorada em milhas:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Fonte:http://www.meridianworlddata.com/Distance-Calculation.asp
EDITAR 2 :fiz vários testes com conjuntos de dados gerados aleatoriamente.
- A diferença de precisão para os 3 algoritmos é mínima, especialmente em distâncias curtas
- O algoritmo mais lento (aquele com todas as funções trigonométricas) é 4x mais lento que os outros dois.
Definitivamente não vale a pena. Basta ir com uma aproximação.
O código está aqui:http://pastebin.org/424186