I don't think it is easily preventable but it is expensive and it would be difficult to prepare without being noticed and might be difficult to execute in a way that couldn't be detected and countered, at least partially.
Firstly $2.5 billion is a substantial sum to throw away unless you are a government.
You would initially need to buy $2.5 billion worth of Bitcoin since that is the amount you calculated you need to have available in BTC to spend in transaction fees. Large purchases of this type tend to push up the price of Bitcoin. (Reference).
Bitcoin transactions that spend $50 in fees to pay someone only some small amount such as $10 would be suspicious and could be blocked, you'd have to re-use a more significant amount, say $2000. Transactions that quickly recirculate that $2000 would also be moderately obvious and easy to block.
Bitcoin has survived brief periods of very high fee rates (e.g. average over $50/transaction in April 2021) - this spurred the development and adoption of higher level Bitcoin payment systems such as the Lightning Network (LN) which use the Bitcoin network relatively infrequently.
Bitcoin miners have invested in the future of Bitcoin and many of them might not want to assist someone evidently intending to do harm to the Bitcoin economy, even despite the short term financial gains offered. It seems likely that many would coopoerate in a defensive action once the attack was obvious. Many or almost all of the less convinced miners might have to follow along with defensive efforts to avoid being left on the wrong side of a fork. Or they would divide their effort between a lucrative fork and a fork with long term value.
Really the question boils down to, if you had $2500000000 and wanted to end up with $0 with the side effect of destroying Bitcoin - would there be a cheaper or quicker way? Would there be something else you could do with that money that would be more beneficial to you?
Ultimately this question is a bit subjective, but I guess there are some aspects of Bitcoin's operation and history that can be brought up in an answer in an objective way.
Footnote re transactions per block
blocks> blockchain -file blk03359.dat -blocks -format csv
No.,Version ,Height,Date and Time , Txs,Target ,Id
1,2C992000,772279,2023-01-16 20:24, 3218,17077CE2,000000000000000000041832D3A631058097F4D5DF55D985E8C664EA221F317D
2,2CDF2000,772280,2023-01-16 20:52, 3510,17077CE2,0000000000000000000116ADA2621CB8F296852A50CD022AD1A905B6D827B600
3,20006000,772282,2023-01-16 21:16, 2788,17077CE2,0000000000000000000506A596FF3A003DB3C4E4221FA38B8A500A19A102C847
4,27FFE000,772283,2023-01-16 21:24, 2971,17077CE2,000000000000000000045811D897C1B593F7F709E0726E88E95E3B7B7AA7C379
5,324F0000,772284,2023-01-16 21:42, 3320,17077CE2,00000000000000000004C114CA81064110AA59C2286D5FA0BA51E02F7BF9B481
[...]
100,20000000,772448,2023-01-17 23:17, 2787,17077CE2,000000000000000000074C2DDD69DC4266EBCE407F4CB89906D0D5A4A6C277F1
101,20000000,772449,2023-01-17 23:20, 3012,17077CE2,00000000000000000006D59307529DE12433207000992AA7087E6560641D1503
102,20000000,772450,2023-01-17 23:23, 1317,17077CE2,000000000000000000066B6B40258410FF5FD5C9034BC5F046FFF82CAEB5A59B
103,293F6000,772451,2023-01-17 23:34, 2957,17077CE2,0000000000000000000427BF57B0D9DBFD00286B5F5EA6DF508ACF56D021D08F
blocks> blockchain -file blk03359.dat -blocks -format csv | ^
More? perl -n -a -F"," -e "if (/0000/) {$t+=@F[4]; $n++;} END{print $t/$n;}"
2196.54368932039
So, <2200 tx/block on average