На счет символов не знаю, но вот ширина в пикселах, пожалуйста:
Код:

Procedure SetTabWidth(Memo: TMemo; Width: LongInt);
Var
I : Integer;
TabArray : array[0..4] of Integer;
Begin
Memo.WantTabs := True;
for I := 1 to 5 do
TabArray[I - 1] :=((Width * I ) * 4) div LoWord(GetDialogBaseUnits);
SendMessage(Memo.Handle, EM_SETTABSTOPS,5,LongInt(@TabArray));
Memo.Refresh;
End;
На счет символов можно так сделать: узнать у канвы (TCanvas) сколько пикселей будет занимать по ширине, скажем символ "а" (или два. или сколько надо) и передавать это значение в процедурку.