Creo que la segunda opción es la más manejable pero depnderá de cuántos archivos sean ya que tendrías todos en memoria.
Puedes usar un arreglo bidimiensional dinámico:
Código Delphi
[-]
type
TMatriz = array of array of TStringList;
Usando la función
SetLength puedes asignar y reasignar las dimensiones de la matriz.
// Saludos