С чем сталкивался я:
1. Обычные ConCat и даже OSU грузили процессор жёстко. Я перешёл на работу по буферам и указателям через StringUtils, и загрузка процессора сразу упала на 20-30% по сравнению с той, что было.
2. Если переменная строки привязана к визуализации и её обновлять из кода, присваивая значение, то почему-то визуализация обновляется даже если переменная имеет то же значение. Я делал таймер BLINK, по нему дёргал R_TRIG и по R_TRIG обновлял раз в секунду. Тоже снизил на 10-20% загрузку проца.
Это было справедливо для CDS 3.5. SP14. Вдруг поправили уже.

Кстати, твой код с IFами можно круто через SEL записать так:
Sost := SEL(PrConc, "Ещё не доехал до концевого", "Доехал до концевого");
Это тот же IF, только красиво завёрнутый в одну строчку. Становится меньше строк и нагляднее код.

Попробуй всё же сделать, как Женя Кислов советует: поотключай лишние куски кода или визуализации и посмотри, что будет.