May I have a suggestion that'd potentially both greatly improve performance when nprs are involved and lessened the amount of work you have to do?
The tl;dr: would be: cut out the simulation that is not needed.
This game already has auto detection without player presence. Why not move further? Cut alien battles out completely - instead, if two hostile fleets are in the system, just compare their stats and use some very simplistic, stupid algorithm to determine winner and remove ships accordingly rather than have the player waste time for the battle that has no effect on gameplay extend "loading screens". Don't care whether the result will accurately represent what would happen in a particular battle, the player won't be able to tell the difference.
And while we're at it, why simulate npr economy and expansion properly as well? Instead of it making colonies, mining, building, researching etc etc make it just spawn ships and ground forces and teleport them around based on criteria like minerals in the system etc etc so more minerals means more ships get spawned etc etc. Then generate all the remaining infrastructure only when needed, so mineral stockpiles and infrastructure built only when player conquers a planet, tracking stations only when player discovers the system (the only infrastructure that is needed before player conquest since it affects combat), simulate proper fleet movement only if player in the system (could make a jump delay for nprs based on their speed or something so that it can't immediately arrive in player system from neigbouring star as this would actually affect gameplay when evacuating your forces, for example, but that's it).
Cutting out all that complex simulation should make the game run faster since it'll have far less things to process in case of nprs without any impact on gameplay since the player doesn't know what's going on in npr systems unless the player is in them.
For players it hopefully means better performance. And even if you don't care since I know you make it for yourself basically etc etc, for you it means far less work on AI and less AI-related bugs.
P.S. Why do you log all the events into FCT_GameLog table even if they can't be accessed in-game anymore due to limits set for max events? Heard log in the db impacts the performance, so why not clear them so the table stays small rather than forcing me to periodically run cleanups? Also, why log npr events at all?