Если вам необходимо получить доступ к какой-либо конкретной записи в файле, вам понадобится какой-то индекс или фиксированный размер записи - но это для всей записи, а не для каждой отдельной части записи. Я бы не стал идти на все, чтобы выровнять данные по 4 или 8-байтовым границам в хранилище. Конечно, если вы читаете запись за раз в выровненном месте в памяти, то вы в конечном итоге получаете выровненные данные для выполнения каких-либо преобразований ... так что все это может в какой-то степени переплетаться - но преобразование скорее всего будет разовым, а не частым доступом после преобразования.
Размер хранилища имеет значение для оптимизации, конечно, потому что чтение меньшего количества данных с диска будет дешевле, чем чтение большего (обычно ...).
Если у вас нет особых требований, таких как фиксированный размер записи, я просто попытался бы спроектировать хранилище так, чтобы использовать было как можно проще. Если у вас есть конкретные проблемы для производительности, вы должны профилировать их. Например, может более эффективно использовать UTF-16 для кодирования строк, чем UTF-8, поскольку кодирование и декодирование должны требовать меньше работы ... даже если это займет больше места. Вы должны проверить это, а не делать какие-либо предположения. Обратите внимание, что когда вы загружаете формат хранения, это будет иметь большое значение - по сети, с механического диска, с твердотельного диска ... у них будут разные характеристики производительности, что, вероятно, затруднит разработку чего-то, что самый быстрый для всех случаев.