A messenger app, and specific messaging relays for it to use is what you would need. All of the current clients attempt to write events to every relay on their list. You'd need your private DMs to only go to relays which handle them correctly.
NIP-26 offers another option with key delegation. Use disposable pubkeys for every message. That way the metadata only shows messages being sent from one random unidentifiable npub to another. But the holder of the private key knows which npubs to fetch messages for.