From my perspective, it has a LOT to do with the limiter you use and the "mastering" (more like finalizing, rather) you do to the final result. Some people like to do the approach where you mix at, say, -1 dB, and apply a transparent or gluing compression effect to bring it up to 0 dB (I prefer transparent usually). With that method, you can go "above" 0 dB in terms of the peaking dB on average and how it would have been greater than 0 dB had there not been a limiter. The gluing compression would be how I would suggest doing it if the loudness makes sense for the given context, though I personally mix near 0 dB already and don't often use gluing compression to even anything out too majorly. I think that if you try and mix at a peaking dB below -3, you might have to compress quite a bit to get near 0 dB, and that could bring out unwanted compression artifacts. You also never said in what way you compressed the result; maybe it's not that good of a compressor? Maybe you started too loud before compressing? Maybe your Master signal chain has an issue?
What you should NOT do is raise the volume of everything WITHOUT using compression until you get it as loud as you want. That will begin to attenuate higher frequencies slightly and squash transients, reducing the crispness of the final result. There's also a greater chance of clipping from the limiter.
The two limiters that I would suggest for this loudness approach due to their high tolerances are TLs-Pocket Limiter (free) and FabFilter Pro-L (commercial). This loud remix uses TLs, and this loud piece uses FabFilter, but I wouldn't consider either of these too loud. I would actually consider
the loudest piece I would ever listen to, if you want a reference. (Madeon's 'Finale' is rather loud too, but on my system I think it's too loud.)I've gotten Fruity Limiter to act pretty decently tolerant, but I would still favor TLs over it. I think the difference between TLs and FabFilter is more subtle, but I would suggest you try both if you get the chance.