<p>The way I do 80-column indication in Vim seems incorrect:<code>set columns=80</code>. 
At times I also <code>set textwidth</code>, but I want to be able to see and anticipate line overflow with the <code>set columns</code> alternative.</p>

<p>This has some <strong>unfortunate</strong> side effects:</p>

<ol>
<li>I can't <code>set number</code> for fear of splitting between files that have different orders of line numbers; i.e. &lt; 100 line files and >= 100 line files will require two different <code>set columns</code> values because of the extra column used for the additional digit display. </li>
<li>I also start new (g)Vim sessions instead of splitting windows vertically. This is because <code>vsplit</code> forces me to <code>set columns</code> every time I open or close a pane, so starting a new session is less hassle.</li>
</ol>

<p>How do you handle the 80-character indication when you want to <code>set numbers</code>, vertically split, etc.?</p>

I'm afraid that you've put constraints on the set of solutions that, well, leave you with the null set.
Using
```
:set textwidth=80
```
will fix all of the problems you mentioned
except
that you can't easily see the line limit coming up. If you
```
:set ruler
```
, you'll enable the x,y position display on the status bar, which you can use to see which column you're in.
Aside from that, I'm not sure what to tell you. It's a shame to lose the number column, fold column and splits just because you have to
```
:set columns=80
```
.