Preheat the oven to 350?F.
Bring a medium pot of water to a boil. Add the green beans and cook until tender, about 6 minutes. Drain the beans and put them in a large bowl filled with ice and water to cool. Drain again and reserve.
Meanwhile, combine the potatoes and 1 teaspoon salt with water to cover in a medium saucepan over high heat and bring to a boil. Lower to a simmer and cook until tender, 20 to 25 minutes. Drain the potatoes and return to the pan. Add the butter, 1 teaspoon salt, 1 teaspoon black pepper, and 1/4 cup milk. Mash the potatoes until smooth but slightly lumpy and reserve.
Heat the olive oil in a large heavy skillet over medium-high heat. Add the ground beef, season with the remaining 2 teaspoons salt and 2 teaspoons black pepper, and cook, stirring, until well browned, about 6 minutes. Add the onions and celery and cook, stirring, until the vegetables begin to soften, about 2 minutes. Add the garlic and cook until fragrant, about 30 seconds. Add the green beans and cook for 5 minutes, stirring occasionally. Add the tomatoes and cook, stirring, for 5 minutes. Add the remaining 1/2 cup milk and cook, stirring, for 4 minutes. Remove from the heat and reserve for later use.
Spread half of the potatoes in the bottom of a 9 x 13-inch baking dish. Pour in the meat mixture, then top with the remaining mashed potatoes. Sprinkle with the cheese and bake until bubbly and golden brown, about 1 hour. Remove from the oven and serve hot.
Makes 10 to 12 servings