Wash, peel, and dice the potatoes into small, even pieces. Cook them in boiling water until they become tender, then set aside.
In a large pot, melt butter over medium heat. Add onions and cook until soft. Add garlic and cook for another minute until fragrant.
Add flour to create a roux and stir well. Slowly pour in the chicken broth while mixing continuously to create a smooth base.
Add milk, heavy cream, and cooked potatoes. Simmer gently until the soup becomes thick and creamy.
Stir in shredded cheddar cheese until fully melted. Season with salt and black pepper according to taste.
Serve hot and top with crispy bacon, extra cheese, sour cream, and green onions.