right this is the kind of things we'd need to investigate...
the request for missing TX's could be done all at once **here's the list of TX i don't know about if anyone knows about these tell me** kinda thing. a distributed relay network whose sole purpose is to collect and relay TX accross the network would help.
also in theory a miner could include a bunch of TX's the network has never seen at which point other miners would be busy asking every other miner about TX's that no other minner has seen. i guess miners could consider that block invalid and orphen it. part of the protocol for miners including TX that he knows haven't been seen by the network would be to include the full TX... and also miners would try not to include TX that have likely Not fully propagated throughout the network ( TX they just heard about <10sec ago ?).
Plenty there to start off a bit of requirement gathering.
Checking other nodes ( 3 steps, ~350 peers) would be pretty quick. If you didnt get a response for a tx from that many, its time to think of ignoring the block and picking another.
.....and/or if blocks were held on NNTP servers, I2P nodes, Tor servers etc you could download from there when peers don't have what you want
I think Just-In-Time Block Requesting is an obvious step. The debate would be around if we want the clients/nodes/miners to keep track of blocks to ensure full coverage or whether to use existing remote storage systems but the first step would use the latter.
We are not looking for blocks - just transactions. Miners will push/publish blocks when they find a solution. Its just to confirm that the transactions they claim make up that block exist - nodes should already have the vast majority in mempool, but due to slight differences there is a requirement to find missing ones. This can only be done through other peers.