If you are not shy of using a widget, it is possible. Implement the DataGridExtension widget and use the Flex Headers option. Store configurations of hidden columns as an assoociated object to the specific users.
In that way, role based hidden columns can definetely be achieved.
You can't in a data grid. What you can do is use a list view or template grid (and use conditional visibility to show certain columns), though this might affect your performance.