Перечисления должны быть статическими и неизменными. Если у вас есть решение, которое требует замены перечисления, тогда перечисления являются неправильным решением.
Внешняя конфигурация страдает от проблем, о которых вы упомянули, так что это не всегда хороший выбор. Чтобы помочь с этим, вы можете зашифровать его, чтобы его нельзя было легко изменить.
Другой альтернативой может быть создание библиотеки ресурсов, в которой файл конфигурации является ресурсом, поэтому его нелегко изменить. Когда вам нужно внести изменения, вам нужно только скомпилировать dll ресурса и развернуть только это, а не все приложение.
Скотт Лэнгхэм упомянул использование таблицы конфигурации в вашей базе данных. Это тоже хорошая идея. Возможно ли это с вашей настройкой?