Is moving large columns to separate table likely to have significant performance improvement?
It is possible that these large string types are not held beside the other columns currently. See here. A forwarding pointer is held instead and dereferenced as required.

It may still be worth splitting out the columns, however, if


the key is smaller than the forwarding pointer; overall space saving, removes the pointer bytes from the row data.
you ever do select * 1; the large fields will not be pulled off disk
the columns are sparsely populated, written to on a different cadence than the other columns, or would benefit from a different indexing strategy.


Conversely  if the values are not too long (say a few hundred bytes) and accessed in most queries you may see a performance improvement by storing them in-row and avoiding the pointer lookup and secondary IO. This can be controlled through sp_tableoption.

1 Not that you ever would, of course.