To change the cursor you would either have to derive the grid and override OnSetCursor, or implement your own IMousecController class.
The simplest way is to derive the grid, and override OnSetCursor.
Here is a sample. You can add additional checks to narrow where you set the cursor.
Another way is to implement IMouseController and fit directly into the grid's mosue controller architecture. You can create a class that implements the IMouseController interface which will also allow you to control the cursor. This takes a little more code but does not require that you derive the grid to use it.
Here is a sample that changes the cursor over the top half of each cell. This means that anywhere else, the grid allows the other controllers a chance to handle the mouse actions. Your mouse controller must implement the IMouseController interface. The main method you have to handle is the HitTest method. Returning a non-zero hit value at that point indicates to the grid that your mousecontroller wants control of things at this point. It will then the use your controller for all messages as long as the hittest returns nonzero. This means your controller will provide the cursor, it will handle the mousedown etc. In the sample, the only functionality implemented is to change the cursor and to handle a left click.
You would use as your hit test criteria for either of these samples being over a header cell border of a hidden column. It would take a little effort, but is doable I think.