One way to hook the sorting up to clicking the column headers is to catch the TableControlCellClick event and if the click is on a column header, do the sort using code similar to what was in the button handler.
I do not think you need more than one unbound column. You can create different custom comparers to do the different types of sorting for a particular column. Here is that sample modified so that when you click on a header, it sorts the grid using a custom comparer based on values in the column to the right of the clicked column. It does this with a single unbound column.
WindowsApplication32_1.zip