Before adding a lot of new complexity, I’d recommend making what you have currently run faster. Your sample app is very simple - two filters, two figures, and a grid. The dataset is tiny. This app should be lightning fast without things like background callbacks or caching. I’d start with optimizing the callbacks so they only run when needed.
Here is a tool that can help find bottlenecks: Performance Profiling Dash apps with Werkzeug
It’s better to stick with either DBC or DMC. It reduces the dependencies and will be easier to maintain going forward. You will also have a more consistent design (colors, fonts, sizes of buttons and input fields etc). If you continue to use DMC as your primary component library, it also has a good grid layout system. I just added a new guide in the docs that gives an overview of layout components in DMC that you might find helpful.