In a large Dutch oven or stockpot, melt the butter over medium heat.
Add the diced onions and celery, sautéing until translucent and softened, approximately 6 to 8 minutes.
Whisk in the flour to form a roux and cook for 2 minutes, stirring constantly to prevent browning.
Gradually pour in the chicken broth and milk, whisking continuously to ensure a smooth texture without lumps.
Add the cubed potatoes, salt, pepper, and garlic powder to the pot.
Bring the mixture to a gentle boil, then reduce heat to medium-low and simmer for 20 to 25 minutes until potatoes are fork-tender.
Stir in the heavy cream and shredded cheddar cheese, continuing to stir until the cheese is completely melted and the soup is heated through.
Optional: Use an immersion blender to pulse the soup 3 to 4 times to thicken the consistency while leaving some potato chunks intact.
Adjust seasoning to taste and serve immediately.