In a large pot over medium heat, melt the butter. Add onion, carrots, and celery. Cook 6 to 8 minutes, stirring often, until softened.
Add garlic and cook 30 seconds.
Sprinkle flour over the vegetables. Stir constantly for 1 to 2 minutes.
Slowly whisk in broth, a little at a time, until smooth. Bring to a gentle simmer and cook 10 minutes.
Reduce heat to low. Stir in milk and half-and-half. Warm 5 minutes—do not boil.
Stir in Dijon, Worcestershire, paprika, dry mustard (if using), salt, and pepper.
With heat on low, add cheddar and Monterey Jack in handfuls, stirring until melted before adding more. Stir in Parmesan if using.
Taste and adjust seasoning. If you want it smoother, blend briefly with an immersion blender.
Serve warm with your favorite toppings.