Memory efficient way to store many numbers (floats, ints) in a .blend file
Collections are indeed not ideal for this use case.

You can store raw arrays in ID properties, which will native data types that don't take up excessive space in memory or on-disk. eg:

bpy.context.object["my_array"] = [1.0, 2.0, 3.0]


You can assign from an array type too:

import array
data = array.array('f', [1, 2, 3])
bpy.context.object["my_array"] = data


Internally float values are stored with double precision (8 bytes per value), as with Python's floats.