Хотя удаление лишних индексов может помочь, вам необходимо убедиться, что вы сохраняете те индексы, которые позволят вашему сценарию обновления легко находить те строки, которые ему нужно обновить.
В противном случае убедитесь, что у вас достаточно памяти на сервере (хотя SQL Server 2000 Standard ограничен 2 ГБ), и при необходимости предварительно увеличьте размер файлов MDF и LDF, чтобы справиться с любым ростом.
Если возможно, ваша пользовательская программа должна обрабатывать обновления как наборы, а не строка за строкой.
EDIT:
В идеале попытайтесь определить, какая операция вызывает низкую производительность. Если схема меняется, это может быть вызвано тем, что вы увеличиваете столбец и вызываете много разбиений страниц. Однако при вставке и обновлении также может произойти разбиение страницы - строка больше не помещается на странице.
Если ваше приложение на C # является узким местом, не могли бы вы запустить изменения сначала в промежуточную таблицу (перед вашим окном обслуживания), а затем выполнить одиночное обновление реальных таблиц? Одно обновление в 1 миллион строк будет более эффективным, чем приложение, выполняющее 1 миллион вызовов обновлений. По общему признанию, если вам нужно сделать это в эти выходные, у вас может не быть много времени, чтобы настроить это.