But they also need to validate each of the transactions within the block, right? And this requires checking the entire history of each of the included users' past transactions to verify that they have enough BTC to make a payment? For up to 2400 transactions per block, that seems very time consuming?
There is no need to check the entire history. The node maintains a list of confirmed transactions that have not yet been spent (the UTXO set) and checks that the inputs of new transactions are in that list.
Once a transaction is confirmed, its inputs are removed from the list because they are now spent and can never be spent again, and its outputs are added to the list.