Я использую классы с константами для вещей, которые действительно будут постоянными (то есть первичные ключи значений в таблицах поиска, которые никогда не меняются). То, что у вас есть в вашем примере, выглядит так, как будто оно может фактически измениться между тестовой средой и производственной средой, и это именно тот тип вещей, который, я думаю, имеет смысл поместить в какой-то файл .config. Затем эти файлы можно сохранить в вашей системе контроля версий / управления конфигурацией для каждой среды, в которой вы развертываете.
Что касается уродства необходимости 'ConfigurationManager.AppSettings ["HostUri"]', вы всегда можете обернуть их в статические свойства с помощью методов получения в классе вашего app_code или внешней библиотеки, чтобы вы могли просто сказать «App. HostUrl.
Что касается производительности, я вполне уверен, что значения в конфигурации кэшируются в памяти при инициализации приложения и / или при первом вызове значений из системы конфигурации, поэтому разница в производительности, вероятно, довольно незначителен.