As anyone who's familiar with TTD's networking protocol knows, the problem with high-latency TTD games is that for every player action and for each engine tick, TTD sends a synchronization packet to the other player and waits for the ACK packet to come back. This allows TTD to remain in sync all the time. However, it also means that an engine tick takes at least twice the latency of the connection, so for a 50 ms connection there's at least a 100 ms wait for each engine tick. Normally the engine tick is 27 ms, so that means the game is four times slower.
Now my idea to improve that is the following: instead of executing player actions and synching them right away, queue them and assign a future engine tick to them. Then do the synching in the background, and as long as both players know when to execute the action, the games will remain in sync.
This would mean that the engine ticks can be 27 ms, no matter how slow the connection is. It also means that a player action will not be carried out right away, but rather with some delay, and this delay would be the time required to sync the action across both computers. Probably something like twice or four times the latency. I think this is still many times better than having to wait that long and the game stopping for all that time.
Basically when a player does something, you'd do the following
1) Check whether the action is possible, if not abort
2) Queue the action for tick now+n, where n is something that the player either inputs or is determined automatically from measuring the latency
3) Send the action to the other computer, including the tick for which you've queued it, and wait for an ACK
4) (Not sure if this is necessary, somebody who's got more experience with networking might know better.) Send an ACK-ACK so that the other computer knows you've received the ACK and know that both computers know now when to execute that action.
5) In the designated engine tick, check whether the action was synched properly. If not synched, halt the engine at this point until the sync is successful. Then execute the action at the beginning of the player's turn. Make sure to test again whether it's possible, and if not, warn the player and discard it.
This way, actions are still executed on both computers in the same engine tick, and the games will remain in sync at all times. In the case where the engine tick was too optimistic (e.g. sudden packet losses, connection suddenly deteriorates), the game will simply pause, just like it would've done without this improvement. In that case, one may want to either adjust the number of ticks that actions are queued ahead, or hope that it gets better.
I think this should work quite well, but I'm not going to try and put it in TTDPatch*, so I thought I'd suggest it here

[* I might try if it turns out that it really does work well, perhaps.]