I see a couple of issues:
* If you have a limited number of public keys, information about the merchant's transaction volume is still leaked when the merchant spends their revenue coins. Normally you'd be able to guess the merchant's profit margin, so just divide the outgoing transactions by (1 - profit_margin) to calculate the original revenue and transaction volume.
* Verifying funds received still needs to be done, so a bitcoind connection still has to be established before shipping. If bitcoind interaction is required, might as well generate a batch of keys every hour or every day.
So it seems to me that generating unique transactions keys in batch and ahead of time is still the way to go.