There is no way to reliably pick the block in which your transaction will be mined. The best you can do is to broadcast your transaction right after the previous block is mined, and set the fee high enough to get it into the next block. However, this won't always work:
- Transactions propagate through the network with random deliberate delays to protect the privacy of the originating node. This means a miner can find the next block before the transaction reaches them. You might be able to bypass these delays by submitting your transaction directly to all miners and pools that support it. Even without these delays the miner could mine the block before updating their block template, which they might do once every few seconds.
- The next block could include transactions submitted privately to the miner (pool) that overpay your transactions and push it out of the next expected block. You wouldn't see these transactions in your mempool and so you might set the fee too low. Worse yet, the miner could be selling the entire block space in a private deal for a token mint or whatever, and no fee could get you in. Finally, your desired block might end up being empty.
Transaction locktimes don't help you because a transaction can only be broadcast after its locktime expires. Recently I've seen calls for creating an extension to the mempool that would accept transactions with soon-expiring locktimes, which would help in your case as all miners would have your transaction at the time it's ready to be mined.