I'm only averaging ~2:30 on 4x4 but I basically use reduction/direct solve roux as one of my two main methods. I do it like this:
1. Solve two opposite centers
2. Solve two 1x3x4 blocks
3. Solve remaining edges using commutators (maximum 3 commutators)
if you want more details on these steps, let me know.
after that point I just fill in the DB and DF edges and OLL/PLL/parity, because I don't know CMLL and I find 2-look CMLL annoying and repetitive. Also, be warned about OLL parity with Roux, I know from Petrus on 4x4 that it can be a pain when you're trying to orient the bad edges and you know there's an even number of them but then there's not and you get confused. I don't have as much of a problem with that now (probably because I've improved my recognition) but yeah, be warned.