take a look at the ResizeTableColumnSupport class, see if you can use it. It should be very fast with large tables bacuse it intercepts rendering of the cell renders of the tables, and determines the preferred width for each renderer component. This way, it can determine the preferred column width. One side effect is that it only takes the visible rows into account.
Hope this helps,