データの管理方法について悩んでいます

1) データ本体(実体)があり、
2) それを参照しているリストは複数個ある (List1, List2, List3, ...)
3) あるリスト List からデータを削除した場合に、他のリストの
該当データも削除又は無効にしたい

4) ところが、これを以下のように書くと、大変時間がかかってしまう

procedure Remove(Data:TData);
begin
 List1.Remove(Data);
 List2.Remove(Data);
 List3.Remove(Data);
 ....
 ListN.Remove(Data);
 Data.Free;
end;

↑のようにすると、データ数が多くなった場合に処理時間が
かかってしょうがないのです


最初は以下のようにやっていたのですが、うまく行きません

procedure Remove(Data:TData);
begin
 Data.Free;
 Data := nil;
 List1.Pack;
 List2.Pack;
 List3.Pack;
 ...
 ListN.Pack;
end;