Nothing wrong with bitcoind (or a cluster of bitcoinds) if you use it properly. Building updates around the blocknotify and walletnotify callbacks is one option. Another option is to run bitcoind in no-wallet mode and use raw transactions for everything. Nobody however runs any service of any significant volume using the bitcoin "accounts".
bitcoind is not ideal for anything with
significant volume, even if you build it around blocknotify/walletnotify.
For bitpay/coinbase, they most likely have listening nodes that listen for any transactions to payment addresses (perhaps using a bloom filter for O(1) time), and when they find one they craft a raw transaction to send it into one of their main wallet addresses.