Как вы заметили есть два способа:
Использовать директиву условной компиляции
Использовать аналоги функции SubString
Каждая функция в C++ Builder имеет три аналога. Например, для вашей функции SubString, есть три варианта:
SubString0 - работает со строкой, как с 0-основной
SubString1 - работает со строкой, как с 1-основной
SubString - Вариант работы со строкой зависит от платформы (мобильные - 0, настольные - 1)
Вы используете третий и поэтому на разных платформах получаете разные варианты работы.
Другого варианта я думаю нет. TStringHelper - это чисто Делфовая особенность. В билдере она не будет работать. Так как строки в Delphi - это базовый тип, а в Builder C++ - нет.