1. Миллионы записей это вовсе НЕ большая БД. Для современной СУБД - это ерунда. Нынче и миллиарды записей не большая проблема, а вы о миллионах каких-то.
2. В БД очень много места занимают индексы. Если вы не будете их делать (и не будете использовать СУБД, которая сама создает индексы) - можете сэкономить и в 2 раза. Как вариант - индексировать каждый раз при запуске приложения.
3. Касается только постоянно изменяемой БД. В БД очень много места занимает журнал транзакций. Если использовать СУБД без журнала транзакций - сэкономите размер, но потеряете в надежности. Если изменения происходят редко и в небольших объемах - проблемы с этим нет.
4. Есть append only СУБД. Там нет фрагментации. Там нет журнала транзакций (или он сильно упрощен).
5. У вас не такие уж и большие объемы. Допустим даже у вас будет 8 строковых полей по 120 символов в каждом. Это около килобайта без индексов. Допустим их будет 1 миллион. Это около 1 гигабайта без индексов.
6. Можно прекрасно разместить в оперативной памяти.
Если нужно прям-таки жестко сэкономить на дисковом пространстве, например, я бы взял СУБД in-memory (1 гигабайт данных + индексы на полгигабайта даже если - это не много для современного компьютера). А данные бы сжимал.