Further details on this, for the immediately curious:
created a table in the DB linking order ids to unique addresses
A cron job populates this table with addresses but does not assign orders
At checkout, instead of querying bitcoind for a new address, it pulls one out of the queue, and assigns its order number
call setaccount(), though if this fails, it is no biggie. The address is already linked in oscommerce.
This avoids any lag caused by connectivity issues between bitcoind server and php server (or other bitcoind-related issues).
That's good stuff. This is why I think we need a bitcoin-business organization to specifically share this kind of thing. Maybe we could just start a sub-forum.