well, the proof is in the pudding :)
You have seen that it cant handle the spike when it happened. All I'm saying is that if 99% of the time Exchange is running fine, then not sure I would worry about the specs, however if you want to be ready for the next time this happens, then you have to either scale up or out. So either add more resources to the existing server or add more servers ( And build a DAG) and spread the load across multiple servers.
I've actually seen a few people complain about this same issue. I personally have never seen it because when I always scale out and try to have more than I need server/resource-wise.
However, I get there are costs with either solution, but that is really what is needed.
As for preventing unlimited messages , there is throttling in Exchange that prevents that backs off connections by IP and time etc...
The defaults are set in the receive connectors and transport service.
https://learn.microsoft.com/en-us/powershell/module/exchange/set-receiveconnector?view=exchange-ps
The MaxInboundConnectionPerSource parameter specifies the maximum number of connections that this Receive connector serves at the same time from a single IP address.
A valid value is from 1 to 10000, or the value unlimited. The default value is 20.
To disable the inbound connection per source limit on a Receive connector, enter a value of unlimited.
But based on your description, that wasnt the issue you faced, since you saw this error "421 4.3.2 The maximum number of concurrent server connections has exceeded a per-source limit, closing transmission channel"
it sounds to me like Exchange throttled the connection, but what it couldnt handle was actually processing all those messages once they were received.