In a large pot over medium heat, cook the ground beef until browned. Drain excess grease.
Add diced onions and garlic, and cook until fragrant, about 2 minutes.
Sprinkle flour over the mixture, stir well, and cook for 1 minute.
Gradually add beef broth, stirring to combine, then add diced potatoes.
Simmer for 15-20 minutes until potatoes are tender.
Reduce heat to low, stir in milk and heavy cream, then gradually add shredded cheese, stirring until melted.
Season with salt, black pepper, smoked paprika, and cayenne pepper if using.
Remove from heat, garnish with green onions, and serve warm.