Скорее это я вызвал путаницу
Сейчас используется вариант №1 (он, кстати, оказался не таким уж медленным. Обработка каждого выражения на клиенте занимает не больше 1 мс)
Пробовал использовать вариант №2 (только функцию собирал в строку вручную), он оказался медленнее
Теперь думаю про вариант №3
1. сервер через $interpolate делает функцию из строки str,
2. полученную функцию конвертирует в строку (тоже не прадставляю как это сделать),
3. собирает все функции в ангуляровский модуль и включает его в файл приложения,
4. клиент при загрузке проверяет, что есть модуль с функциями и использует их параметром $scope(или что-то другое) и получает текст,
5. который показывает пользователю.
Это по-любому будет самый быстрый вариант, но сериализовать, полученную через $interpolate функцию, скорее всего не получится. Наверное, проще будет распарсить выражение и вручную превратить его в функцию...
P.S. О ресурсах сервера можно не беспокоиться, т.к. это не бэкенд сервер, а машина разработчика.