Cook bacon in a large pot or Dutch oven over medium 6-8 minutes until crispy; transfer with a slotted spoon to paper towels, leaving about 2 tablespoons grease.
Melt butter in grease; cook onion 4-5 minutes until softened, then garlic another minute.
Sprinkle flour over onions; stir constantly 2-3 minutes to form a roux without browning.
Gradually whisk in broth constantly to prevent lumps; add milk and simmer gently.
Add potatoes, salt, pepper, and garlic powder; simmer 20-25 minutes, stirring occasionally, until potatoes are fork-tender.
Partially mash potatoes in pot with a potato masher to thicken, leaving plenty of chunks.
Stir in cream, cheddar, and sour cream; cook over low 3-5 minutes, stirring frequently, until melted and combined.
Adjust seasoning to taste; ladle into bowls and top with crispy bacon, extra cheese, sour cream, and green onions.