距離の二乗で比較して√を求めない。なんていうのは当たり前として、

Nがバカでかくて、繰り返しこの検索をしないといけなくて、(X Y)が毎回全部変わるとかではない場合なら
あらかじめ適当な大きさの範囲ごとに割り振っておいて、(a b)がある範囲とその周囲だけからだけ検索するとかすれば。
(X Y)が移動するなら、範囲ごとの配置はリスト構造にしといて範囲間移動の負荷を軽減するようにするとか
状況によって最適な方法は変わるだろうし、がんばれば早くなるってもんでもないと思うけど