вообщем все выяснилось. на самом деле виноват TMemo, в который помещается Base64 текст. сама процедура
Код:
procedure EncodeStream(Input, Output: TStream);
на 1280*1024 работает 50мс (по GetTickCount) и возвращает строку длиной 5 242 952 байт. если сохранить ее в переменной String все идет как по маслу, декодер тоже быстро отрабатывает. но если присвоить ее TMemo то все - запасайтесь сигаретами)
добавлено позже
использование TRichEdit вместо TMemo тоже решает проблему скорости.
http://zalil.ru/34545290