You mean dgHeaderHotTracking, it does just what you want, it highlights the column header where the mouse is at the moment.
Now you want something more specific, some column header should be highlighted and some not. I think the easiest solution is what you already mention. You need to cheat a little, you have to find over what column you are, check if this column is clickable and if it's so, do nothing, but if it's not, change the FixedHotColor (which is the color used to draw the 'hot look'). Something like this:
procedure formXXXXX.dbgridMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
aCol, aRow: Longint;
begin
dbgrid.MouseToCell(x, y, aCol, aRow);
if Unclickable(aCol) then dbgrid.FixedHotColor := dbgrid.FixedColor
else dbgrid.FixedHotColor := FOldFixedHotColor;
end;
Note that this will work only if the grid titleStyle property is different from tsNative because that internally uses OS theme drawing and not custom drawing. FOldFixedHotColor:=dbgrid.FixedHotColor at form create for example.