Размер связан не с EXE, а с самим модулем. Посмотрите на размер OCF.

Происходит следующее.
Для любого RECORD компилятор кладёт в дескриптор типа информацию о смещениях указателей в этой записи. Эта информация потом используется при сборке мусора, отладке и т.п.

При этом в дескриптор добавляются смещения и всех подэлементов. Т.е. вообще - позиции, на которых в экземпляре данной записи находятся указатели.

Таким образом, для Вашей записи сгенерировано 500000 пунктов. * 4 - как раз 2 Мб. Размер дескриптора типа.

Используйте поле POINTER TO ARRAY.