In a large pot or Dutch oven, melt butter over medium-high heat. Add onion and celery and cook for 4 minutes, or until translucent.
Add flour to the pot and cook, stirring constantly, for 3 minutes.
Gradually whisk in chicken broth and cook, stirring, for 3 minutes.
Add potatoes, milk, heavy cream, and seasonings. Bring to a boil, then reduce heat to medium-low and simmer for 8-12 minutes, or until potatoes are fork-tender.
Mash the potatoes with a potato masher on one half of the pot until mashed. Alternatively, remove half of the soup to a blender, blend until smooth, and return to the pot. Or, use an immersion blender to partially blend the soup.
Stir in cheddar cheese until melted and smooth.
Garnish with green onions and serve.