Поместите индекс на old_Name и посмотрите, сколько времени это займет ...
Во-вторых, при анализе вашего запроса может показаться, что в нем есть недостаток. если вы посмотрите на переформатированную версию ниже,
UPDATE table SET
name = (SELECT TOP 1 old_name
FROM (SELECT SUM(r) rev, number, name,
intermediate_number, intermediate_name,
old_number, old_name
FROM table
GROUP BY number, name, intermediate_number,
intermediate_name, old_number, old_name) t
WHERE t.old_name = table.old_name -- HERE
ORDER BY rev DESC);
От второй до последней строки WHERE t.old_name = table.old_name приведет к тому, что внутренний подзапрос будет содержать только строки с t.oldname = значением внешней таблицы запросов .old_name. Таким образом, не имеет значения, используете ли вы Top 1 или нет, так как все строки будут иметь одинаковое значение для old_name, вы всегда будете устанавливать значение точно таким, какое оно уже есть, нет ??
РЕДАКТИРОВАТЬ: (в зависимости от изменения условия Where) попробуйте это:
UPDATE table SET
name = (SELECT Top 1 old_name
FROM table it
Where it.name = table.old_name
GROUP BY number, intermediate_number,
intermediate_name, old_number, old_name
Order By SUM(r) Desc);