Вообще говоря, я сохраняю текст сообщений об ошибках в файлах ресурсов. Если вы используете .NET 2.0 или выше (Visual Studio 2005 или выше), файлы ресурсов автоматически скомпилируются в строго типизированные классы, что делает код, который обращается к указанным сообщениям гораздо более понятным и читаемым.
(EDIT: увидев еще один комментарий, который упоминает локализацию, я чувствую честь также упомянуть об этом здесь: файлы ресурсов .NET делают отличную работу по локализации. Вы можете получить локализованный текст ресурса с помощью точного тот же код с несколькими незначительными изменениями, чтобы предоставить CultureInfo.)
Это говорит о том, что часть этого проблемного домена является номером сообщения. Выбрасываются ли эти ошибки из базы данных (например, как часть хранимых процедур или триггеров)? В этом случае хранилище базы данных, скорее всего, является подходящим местом для них, хотя бы потому, что оно наиболее точно документирует их там, где используются «магические числа».