Auch wenn ich auch glaube, dass hier am falschen Ende gespart wird, möchte ich nochmal auf meinen Beitrag #20 zurückkommen.
http://www.delphipraxis.net/1380280-post20.html
Hier zeige ich im Screenshot explizit die Funktionsaufrufe, die am meisten Zeit benötigen.
Da kann man dann anfangen zu optimieren, indem man nicht für jeden String die ganzen Objekte neu erstellt, sondern nur einmalig und damit die größte Breite ermittelt.