PostgreSQL tiene un límite de columna de entre 250 y 1600 "dependiendo de los tipos de columna", y admite datos espaciales y consultas con la extensión PostGIS. Entonces me inclinaría a hacer dos cosas:
Primero, cuando una columna representa una categoría en lugar de texto libre, cree una tabla separada con esas categorías y reemplace la columna con una ID de entero y una restricción de clave externa, haciendo referencia a la tabla de categorías.
En segundo lugar, divida la Tercera Forma Normal dividiendo la mesa grande en dos o más de una manera lógica, y establezca una relación uno a uno entre ellos. Este no es quizás el más eficiente, pero si rara vez necesita algunos de los datos, entonces la consulta puede estar en las tablas que desee.
Otra alternativa completamente diferente sería utilizar una base de datos "NOSQL" como MongoDB, CouchDB, etc. No hay límites fijos para el tamaño de "fila", y si los datos no están presentes para un registro, no necesita ocupar espacio.
El soporte espacial no es tan bueno para este tipo de bases de datos bigtable, pero MongoDB admite consultas y datos espaciales 2D, y CouchDB parece tener una funcionalidad similar.