Se è l'utente finale a poter scegliere quale colonne siano visibili o meno, io farei (quasi) esattamente come hai detto tu, userei solo javascript invece di php, tanto per evitare il ricaricamento della pagina ad ogni show/hide. E sì, eviterei anche le checkboxes, ma quelle son questioni estetiche.