This question is an almost-duplicate, but not quite.
To a large extent, the varchar(max)
columns are stored off-page. If you do not refer to them in a query, then they are not loaded. So, they provide little additional overhead.
The situation is different if the values are stored on the same page. Then removing them can shrink the size of your table and fewer pages should be faster for select
queries. Here is an interesting blog on this subject.
You have an additional constraint, in terms of truncating the table. That would seem like a win for many queries, so I think that tips the argument toward putting the values in a separate table.
Note, however, that truncation is not the only possible solution. You could also partition the data (say by month or week). If the partitioning key is part of all queries, then you can use partitioning instead of truncation and also reduce the effective size of the table.