Ну если у вас есть очень много мелких и связных объектов - и вам реально надо на них экономить...

Локализуйте задачу. Не надо ставить её "для языка и для всех подобных задач".
У вас, скорее всего, это будут объекты, инкапсулированные в чём-то.

Например, торчит наружу один большой контейнер - Carrier, у него Rider для доступа к данным, а внутри - эти миллионы малых объектов.

Ну и реализуйте их в рамках одного модуля как угодно. Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.