Многое из этого будет зависеть от того, как вы собираетесь использовать список и в каком масштабе. Если вы собираетесь использовать его в качестве стека или очереди, то TList будет работать нормально. Если вам нужен поиск по списку для определенного элемента, то вам нужно что-то, что позволяет быстрее искать. TDictionary (2009) или TStringList (до 2009) будет наиболее вероятным выбором.
Динамические массивы также возможны, но если вы используете их, вы захотите свести к минимуму использование SetLength, так как каждый раз, когда он вызывается, он перераспределяет память. TList управляет этим для вас, поэтому я предложил использовать TList. если вы ЗНАЕТЕ, с каким количеством вы будете иметь дело заранее, тогда используйте динамический массив и установите его длину в начале.
Если у вас больше предметов, чем уместится в памяти, ваш выбор также изменится. В этот момент я бы либо использовал таблицу базы данных, либо tFileStream для хранения записей, которые должны быть обработаны, а затем стал бы искать начало таблицы / потока для обработки.