Using a simple global array to be the list of addresses and pointers, full load time went from about 3ms to 15ms. But it works just fine and the lookups are so fast the microsecond timer registers zero.
Great! I would think that the gain in efficiency of the routing more than offsets the extra processing for setup. You could consider making it multithreaded but I don't think anyone would notice an occasional 15ms delay and/or some drops. On our radio network such behaviour is quite normal.
Another possibility would be to first scan for the "common case" of all subnets and gateways remaining the same but only the endpoint address of one or two gateways changing, and in that case omit the entire table setup and only patch the nexthop addresses of those gateways.
Rob