Why do I have to rescan the blockchain for hours to see the correct balance when I add a (old) descriptor/key
Actually it doesn't need to take hours if you specify "timestamp" on the imported descriptor.
How does the network check for double spending so efficiently?
Short answer, full node use UTXO index/database.
When you add an old descriptor/key to your Bitcoin wallet it actually initiates a blockchain rescan to update its internal UTXO set and reflect the correct balance. The process may actually ttake hours because your wallet is re-processing the entire blockchain, checking for any transactions related to the newly added key, and updating its wallet database accordingly also maybe because you network connection is a little slow.
Blockchain rescan doesn't require network connection.
In contrast when you broadcast a Bitcoin transaction the network checks the mempool for duplicate transactions, verifying the transaction's TXID and hash, checking the blockchain headers for proof-of-work validation, and using SPV to verify the transaction's inclusion in the blockchain. These actually enable the network to efficiently prevent double-spending.
Please double check what you write. Transaction which just arrived on mempool is unconfirmed, so checking blockchain or block header isn't relevant. Using SPV approach doesn't make sense to full node either.
Op also note that the speed of your confirmation depends on the depth location of your transactions in the MEMPOOL. To place it at a lower depth in the MEMPOOL means you need to broadcast with a higher fee in that way it gets confirmed faster.
To be exact, higher fee rate.