Cook the bacon in the skillet until crispy, approximately 4-5 minutes. Transfer the cooked bacon to a plate lined with a paper towel.
Add the onions to the skillet and cook until beginning to caramelize. Remove from the heat and drain off the fat.
In a large stockpot filled 3/4 of the way with water, add the potatoes and 2 tablespoons salt and bring to a boil over med-high heat. Continue to cook over medium heat until they are fork tender. Approximately 20-30 minutes.
Drain the potatoes in a strainer and transfer to a large mixing bowl.
Add the cream cheese, half and half, butter, salt and pepper to the potatoes.
Using a hand mixer, mix all the ingredients on medium speed until thoroughly combined and the potatoes are broken up. The mixture should be fluffy with a few potato chunks throughout. (Be careful not to over beat the potatoes because they can become gummy.)
Add the cheese, half the bacon and the sautéed onions. Fold into the potatoes with a spatula or wooden spoon. Transfer the potatoes to a serving bowl and sprinkle with the remaining cheese, bacon and green onions.
Serve immediately or cover and refrigerate until ready to serve.