есть уже такой велосипед и очень не плохой - для хранения таблиц в памяти удобно использовать стандартный TClientDataSet:
Код:
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('ID', ftInteger);
ClientDataSet1.FieldDefs.Add('Name', ftString, 10);
ClientDataSet1.CreateDataSet;
поддержка индесков, фильтров и т.д.