To jest błąd w SQL Server 2008. Użyj
insert @columns
select ColumnNames.value('.', 'nvarchar(300)') name
from @xColumns.nodes('/columns/name') T1(ColumnNames)
OPTION (OPTIMIZE FOR ( @xColumns = NULL ))
To obejście pochodzi z elementu na Microsoft Connect Site który wspomina również o poprawce dla tego problemu z czytnikiem Eager Spool / XML (pod traceflag 4130).
Przyczyna regresji wydajności jest wyjaśniona w inny element połączenia