What is the fastest way to determine the last filled row in a column?

The fastest way to determine this is to prepare the information when the grid is filled.  You could maintain an array of high-water marks where you store the last column for each column.

Every time you are or the user is changing cells in the grid, StoreStyleRowCol is called.  So, you should override StoreStyleRowCol and increase the high-water-mark for the specific column if necessary.

Take care if rows are removed or inserted:

a) When rows are removed StoreRemoveRows is called.

b) When removing rows is undo StoreInsertRows is called.

Override these two method and adjust the high-water-mark.