I don't think
table-layout: fixed does what you think it does. It only affects the way the rendering of the table is achieved, it doesn't really
fix anything.
W3
If there is a gap when you hide a column then you are probably using
visibility: hidden rather than
display: none - which would completely remove them from the page.
I haven't managed to fully conquer column widths. I've found that it can work if I insert DIVs into cells and set these to a specific width.
Otherwise you could apply a class to every td/th and use JS or jQuery to switch these classes.