Стандартный дельфевый TDataset хорош тем, что он не хранит данные, а является интерфейсом для работы с данными. И он не ограничен определенным количеством, через First()/Next() он работает как итератор и может выдавать больше данных, чем влезает в память. И еще многое другое. Да, он избыточно сложный. Но и возможностей у него намного больше, чем у TList