Можно сделать на базе этого примера https://gricuk.ru/lp/blog/item/komponent-dlya-rasc... .
Надо будет переделать под то, что у Вас уже известно местоположение и из него вытащить ZIP. А вес подставить из поля WEIGHT у товара.
photosho, Проблема с разделами из за того что дерево нужно хранить в таблице. И на это есть накладные расходы. В nested set - это пересчет left, right margin. Да и проблемы эти начинаются где то в районе 20000-30000 разделов.
Очень сильно зависит от того что с помощью этого компонента выводится. Например какой нибудь слайдер можно и закешировать. А там где часто происходит обновление фильтра - нужно подумать.
можно написать свой обработчик для события onGetOptimalPriceHandler в сочетании с кастомным \Bitrix\Catalog\Product\CatalogProvider. Но в любом случае если у вас разные валюты, оплату можно сделать только в валюте которая указана в настройках модуля sale.
где то на событии можно объект заказа можно посмотреть. Он или в arResult будет или одним из параметров метода. Я дал общее направление. Детали не подскажу, для этого нужно смотреть в код и дебажить.