Here is a solution that could work using the teams a01-a10 and b01-b10. The partnerships should all be different, the byes are evenly distributed, and most pairs of players from different teams oppose once or twice. I suspect that slightly better opposition balance may be possible.
(a01 a07 v b02 b04) (a05 a04 v b01 b06) (a02 a06 v b03 b07) (a03 a08 v b05 b08)
(a09 a02 v b02 b03) (a03 a01 v b06 b10) (a06 a04 v b04 b01) (a10 a05 v b05 b09)
(a02 a04 v b10 b08) (a03 a10 v b03 b04) (a01 a08 v b07 b02) (a09 a07 v b09 b01)
(a09 a06 v b08 b06) (a01 a02 v b09 b07) (a05 a08 v b01 b10) (a10 a07 v b05 b02)
(a10 a08 v b03 b06) (a04 a09 v b07 b05) (a05 a07 v b04 b08) (a06 a03 v b09 b10)
(a05 a02 v b03 b01) (a07 a08 v b06 b07) (a06 a01 v b05 b04) (a04 a03 v b02 b08)
(a10 a02 v b10 b04) (a09 a03 v b01 b02) (a06 a05 v b03 b05) (a04 a01 v b09 b06)
(a07 a03 v b07 b01) (a10 a04 v b02 b10) (a08 a02 v b04 b09) (a01 a09 v b08 b03)
(a09 a05 v b07 b10) (a08 a06 v b09 b02) (a02 a07 v b06 b05) (a01 a10 v b01 b08)
(a03 a05 v b04 b06) (a04 a07 v b03 b09) (a08 a09 v b05 b10) (a06 a10 v b08 b07)
(a09 a10 b09 b10) are the byes in round 1, (a07 a08 b07 b08) in round 2, etc..