у вас есть ecs зачем вам что-то ещё. Я не пробовал хранить так много игровых данных. Всегда писал врапперы что ли, ByteArray, который паковал и распаковывал данные. Точнее он обращался к классу и говорил ему, пакуйся сюда. Каждый класс паковал себя сам. А когда нужно, происходила обратная распаковка. (ну как в Minecraft)
типо PutByte, GetByte. Более сложные разбивались на более простые, до байта (ну или бита).
Говорят вся прелесть protobuf в том что он работает быстрее из-за того что использует разрядность окружения. Особенности обработки данных в памяти.