Хорошо, у меня есть другая идея, поэтому я публикую ее как другой ответ. Я думаю, что мой предыдущий ответ с ограничивающими полигонами, вероятно, сам по себе имеет некоторые достоинства, даже если он должен был уменьшить количество полигонов, извлекаемых из базы данных, на небольшой процент, но этот, вероятно, лучше.
MSSQL поддерживает интеграцию с CLR начиная с версии 2005. Это означает, что вы можете определить свой собственный тип данных в сборке, зарегистрировать сборку в MSSQL, и с этого момента MSSQL будет принимать ваш пользовательский тип данных как допустимый тип для столбца, и он будет вызывать вашу сборку для выполнения операций с вашим пользовательским типом данных.
Пример статьи для этого метода в CodeProject: Создание пользовательских типов данных в SQL Server 2005
Я никогда не использовал этот механизм, поэтому я не знаю подробностей о нем, но я предполагаю, что вы сможете определить новую операцию для вашего типа данных или, возможно, перегрузить существующую операцию, например, "меньше чем" , так что вы можете проверить, пересекает ли один полигон другой. Это может значительно ускорить процесс.