Oh boy, I found/invented a tweak that I can't live without anymore. I use an MX Ergo trackball, not sure how it'd fare on a mouse, but here are the magic runes:
xinput set-prop <mouse device id> "libinput Scroll Method Enabled" 0 0 1
xinput set-prop <mouse device id> "libinput Button Scrolling Button" 8
Where you'd change 8 to a chosen mouse button and the mouse device id to its appropriate value from xinput list.
What this does is make it so that as long as that button is being held, moving the cursors scrolls instead. It's hard to describe how much better of n experience it is vs. using the scroll wheel. It's much faster, much more precise, and less finger-tiring.
Here's a gist of the Python script I use to set it up - https://gist.github.com/pedrovhb/41e9d5b7b7b5c13fe2c94aa4cee1193a
wow that's neat! I use and love the same device and while it feels a bit odd at first it also feels better than using the scroll wheel. btw in case anyone wants to try a different button (8 is "Page back") you can use `xinput test ` to listen to events and see which number each button is. Good news: it seems like the Back button still works when using this. Thanks!
edit:
Putting this in ~/.xsessionrc seems to work fine for me on Ubuntu:
xinput set-prop "pointer:Logitech MX Ergo" "libinput Button Scrolling Button" 8
xinput set-prop "pointer:Logitech MX Ergo" "libinput Scroll Method Enabled" 0 0 1