1. делаете пустой шаблон сайта, который будет применяться если в get запросе присутсвует параметр ajax_call=Y
2. отправляете форму с помощью $.ajax(), только к url присоединяете ajax_call=Y
3. результат вставляете в тот же контейнер, в котором была форма
Но, проще с помощью fancybox и содержимое вставляете в iframe, и работает без ajax'a
фронт: выглядит красивее, можно делать анимацию. Если калькулятор "продающий" то однозначно на фронте.
бэк: проще в реализации и его проще масштабировать и закладывать в него сложную логику, но от него будет нести нафталином. Ещё один довод за бэк - если при работе калькулятора понадобится активное взаимодействие с erp компании.