I see the advantages of your approach.
However, I think one of the disadvantages would be that all the transformations would have to be applied at the end of __getitem__ (or after it).
For a lot of use cases, this might be a valid approach. However, if you would like to apply (some) transformations after loading your data, then perform something fancy like a sliding window approach etc., and finally apply another transformation, the work flow might break and I’m not sure if it’s worth it.
An easy workaround for your use case would be to write a get_sample(self, index) method, which just loads a single sample and use it in __getitem__.
Your Dataset would look like this:
class MyDataset(Dataset):
    def __init__(self, paths, transform=None):
        self.paths = paths
        self.transform = transform

    def get_sample(self, index):
        img = Image.open(self.paths[index])
        return img

    def __getitem__(self, index):
        x = self.get_sample(index)
        if self.transform:
            x = self.transform(x)
        return x

    def __len__(self):
        return len(self.paths)

Using this approach, you could call dataset.get_sample(0) to get the plain sample without any transformations in case you would like to have a look at the data in your notebook.