Orphaned blocks don't increase the difficulty as they should and the estimated hash rate is based off the difficulty.
So they may have 51% of the estimated hash rate (the hashrate you can watch on the minerpoolstats for example) but the real hash rate should be much higher, and no, they don't have 51% of that.
There need to be an adjusted difficulty calculated with consideration to orphaned blocks to estimate the actual hash rate at this point.
The statistics where they said they got a 51% attack is from a website they control included the database.
XMR devs preparing the hardfork for EQ25 - BQ26
The FCMP++ already running and on 80-90%, but the Codebase Auditors still need to review some codebase. RandomXV2 is the much more difficult part here.
A solution for this Reorg stuff could be to don‘t work on the reorg itself, (personal opinion) but to work on the reorg rules. But this will pump the Audit timing on the actual codebase up or even restart it, so it could have a impact on the delay on the Hardfork for FCMP++ belongs on the „touched“ codebase.
With 35% hashrate they can definitely cause disruption, orphan blocks, delay transactions, and do selfish mining, but it's not a 51% attack. 51% attack means complete control over what blocks and transactions make it into the chain. Their stated goal is to prevent other pools from mining at all, and the only way to do that requires 51% hashrate. Of course, their actual goal appears to be to cause FUD and convince miners to switch.
So to clear this up:
Orphaned Blocks happend,
51% didn‘t happen,
also they didn‘t control 51% of the real overall hashrate
More important they are far away of control 51% over time
There are solution approaches, the question is how quick the reaction need to be.
If you enjoy strategy, building and war games then you might enjoy this amazing game which is called Terracore. https://www.terracoregame.com/