Вы не тестируете с 1 записью, ваш цикл будет работать до тех пор, пока в этой временной таблице не будет записей, и будет удалять по одной строке за раз, что довольно ужасно.
Попробуйте это:
DECLARE @rowsAffected BIGINT = 1
WHILE @rowsAffected <> 0
BEGIN
BEGIN TRANSACTION
DELETE TOP (100000) A
FROM TableName A
-- anti-semi join is better for performance than regular left
WHERE NOT EXISTS (SELECT 1
FROM #PlateNumbers2Keep B
WHERE B.PlateNumber = A.PlateNumber)
SET @rowsAffected = @@ROWCOUNT
COMMIT;
END;