I'd try subscribing to the
CellPainting[
^] event. Within its handler method, you can perform any conditional checks you want. And within its
arguments[
^] you get a
Graphics[
^] object to draw whatever fits your need.
I haven't tried whether that works for heading cells, though.