As you can probably tell by now, there is no "accepted" method. It's a set of tradeoffs that only you are in the better position to work out. You just need to use your imagination.
I do not fully apprehend your situation. But you've written enough about it that I can offer a thought or two. I gather that you would like to use your MAX7219 devices. And you already have the displays you mentioned, as well.
So something like this:
simulate this circuit – Schematic created using CircuitLab
One MAX7219 is used for the "upper half" of your displays. The other one is used for the "lower half." This gets full coverage for all your segments. The only other problem is the digit drives. For this situation, you activate both MAX7219 devices. However, if you imagine each 2-digit display as having four quadrants, then the upper-MAX7219 is driving the upper left quadrant while the lower-MAX7219 is driving the lower right quadrant. And then, in the next period, the upper-MAX7219 is driving the upper right quadrant while the lower-MAX7219 is driving the lower left quadrant. This keeps the cathode return currents separated. It takes two periods to complete one 2-digit display device. Eight periods covers four 2-digit displays, or 8 digits total, and does this with just two MAX7219 drivers using \$\frac{1}{8}\$ duty cycles.
You'll have to work out the dissipation issues, though. I've not bothered thinking about that part. Nor have I thought more about the average intensity you might get out of this, beyond what I already mentioned in comments.
If you want this to be "fire and forget," then you will need another microcontroller to operate this display for you. That's not a difficult task. But it adds another MCU and its associated software and hardware toolchain. And that can be a problem. But also an advantage. You'd just "download" the display data to it, letting it store that in its own RAM, and then just walk away until the next time you need to update that display data.
On the other hand, it's not difficult to set up a timer event on your current system that operates entirely "in the background." You can use your own software to "pre-prepare" all of the 8 states of data to transmit into 8 simple buffers (given the display data that needs to be displayed, first), which the timer event simply toggles between and then loops back over. The pre-preparing software can run in regular code at any time, completely independent of the display timer events. All it does is to set a "change message" that the timer event looks for in order to switch to the next set of 8 buffers, once it completes a prior display cycle, freeing up the memory for the last display data to be used by your code next time. ("Double buffering.")
Up to you.