One simple approach would be to use batch_size=2 in the DataLoader and add the sampling logic to Dataset.__getitem__.
This method would get the two indices as its index argument, and you could use this index to sample the desired paired sample. If you want or need, you could also use a BatchSampler, which would pass both indices together and might make your custom sampling easier.
A disadvantage would be that your batch_size is specified as e.g. 2, while your actual DataLoader returns a tensor with a batch_size of 4.
Alternatively, you could also write a custom sampler.