The OP was adamant that every bit of data needs to be visible at all times and my answer respects that constraint. For a more general solution to displaying a large table, especially on a small screen, I highly recommend this four minute video from NN/g.
Since all of the data after the first three columns is numeric, you can round off so that the width of each column is as little as four characters.
Full Length Shorter Tiny ----------- ------- ---- $143,573.39 $143.6k 144k 112.54% 112.5% 113 198,220,329 198.2m 198m
You might decide which version to display based on the amount of space available. Those fortunate to have larger monitors would still get everything. The presentation would degrade gracefully for smaller monitors
Of course, when the contents of a cell are abbreviated, you should show the full value in a tool tip.
@Oskar pointed out in the comments that showing numbers with different magnitudes makes it more difficult to compare visually. So here’s a variation in case comparing relative values is more important than precision.
Revenue ($millions) ------------ 143.6 93.2 0.3 < 0.1
(The header in this example is wider than the data, but as others pointed out that can be solved by tilting the headers at a 45 degree angle.)
You can try displaying multiple lines per record, e.g.:
You can also go a step further by making each row a summary view that can be expanded so that the user can see the complete record, e.g.:
In the pic above, the user is interested in Mary Jane’s complete info, so she clicks on the triangle next to her name to see the complete record.
Also, I disagree with your premise that “column hiding is somewhat out of the question”. If there really is that much information, the user is going to want to hide something. You may want to have them all visible by default initially; but there should be a way for the user to hide some columns as she goes.
If the columns are out-growing the rows, you can try to put the rows as columns