Если у вас есть возможность использовать базу данных с пространственной поддержкой, поместите свои 1М точек в таблицу и создайте для нее пространственный индекс. Затем вы можете выполнять запросы к таблице, оптимизированной по индексу.
Если у вас нет возможности использовать БД с пространственной поддержкой, вы можете реализовать логику пространственного индекса в своем собственном коде. Это сложно, к сожалению. Вот вики-ссылка на различные пространственные индексы .