Полиморфизм сам по себе влияет на уровне погрешности.
Архитектура без него может оказаться настолько менее оптимальной, что будет тормозить куда сильнее.
По моему опыту оптимизации вычислительной работы программы по скорости, главная проблема - это считать именно то, что нужно. Если просчитываются варианты, то их отсеивание на как можно более ранней стадии - это такой козырь, который бьет любые другие оптимизации.
Вторая - работа с памятью. Создание массива объектов во вложенном цикле в рекурсивной функции легко уложит на бок весь top500 %) Не говоря уже о том, что вероятность течи прямо пропорциональна количеству динамически созданных объектов.
А полиморфизм... ну, если у вас реально полиморфная функция будет вызываться миллион раз в секунду, вы, наверное, почувствуете падение производительности...
В общем, оптимизацию, как мне кажется, нужно проводить в обратном направлении. Сначала - архитектура, в которой работа алгоритмов будет понятной и очевидно оптимальной, затем - поиск узких мест. Если однажды дойдет до того, что узким местом станет полиморфный вызов функций... ну, поздравляю - учите ассемблер!