MySQL и даже SQLite уже имеют пространственные индексы, поэтому проблем здесь нет.
Для хранения файлов данных вы можете использовать поле BLOB, но обычно его гораздо лучше (и проще оптимизировать) хранить в виде файлов. Чтобы сохранить файлы, относящиеся к записям БД, вы можете либо указать полный путь (или URL) в поле varchar, либо сохранить изображение в пути, рассчитанном по идентификатору записи.
Чтобы легко перейти в хранилище объемом несколько терабайт, с самого начала планируйте использование нескольких серверов. Если данные в основном для чтения, простой способ - хранить изображения на разных хостах, каждый со статическим HTTP-сервером, и записи базы данных, где находится каждое изображение. затем поместите веб-интерфейс веб-приложения для базы данных, где URL-адреса каждого изображения напрямую указывают на соответствующий сервер хранения. Таким образом, вы можете продолжать добавлять хранилище, не создавая узких мест на «центральном» сервере.