Heat a large Dutch oven or heavy-bottomed pot over medium-high heat. Add the ground beef and cook, breaking it into crumbles, until browned. Drain excess grease, then transfer the beef to a plate.
Reduce heat to medium and add the butter. Add the onion, carrots, and celery. Cook for 6–8 minutes, stirring occasionally, until softened.
Add the garlic, paprika, mustard powder, salt, and pepper. Cook for 30 seconds. Sprinkle in the flour and cook, stirring, for 1 minute.
Slowly pour in the beef broth, stirring and scraping up any browned bits. Add the potatoes and Worcestershire sauce. Bring to a boil, then reduce heat to maintain a gentle simmer. Partially cover and cook for 12–18 minutes, stirring occasionally, until the potatoes are fork-tender.
Stir in the cooked beef and milk. Cook gently for 3–5 minutes, until heated through. For a thicker soup, mash a few potatoes against the side of the pot and stir them back in. If needed, simmer gently a little longer before adding the cheese.
Turn off the heat and let the bubbling stop. Add the cheddar a handful at a time, stirring until melted before adding more. Taste and add additional salt and pepper as needed.
Ladle into bowls and add desired toppings.