Prepare a 9-inch by 13-inch rectangular baking pan by greasing it with butter and coating the inside of the pan evenly with a thin dusting of flour. Set aside.
In the bowl of your stand mixer fitted with the paddle attachment (or in a large bowl with a hand mixer), cream the butter and sugar until light and fluffy (about 4 minutes).
Add the pudding powder and whip on high speed until incorporated.
Add the eggs one at a time, mixing well after each addition. Add a tiny amount of green gel food colouring after the eggs, if desired.
Combine the milk, vegetable oil, and vanilla extract in a separate bowl or pyrex measuring cup and whisk with a fork to combine.
Add the milk mixture to the butter mixture slowly, mixing well until combined.
Add the flour, cornstarch, baking powder and salt, and mix on low speed just until the batter forms and no streaks of flour appear.
Finish mixing by hand with a rubber spatula to be sure the batter is well combined (mixing with the electric mixer at this stage can cause over-mixing, so it's best to finish it gently by hand).
Pour the batter into the prepared pan and bake at 350 degrees Fahrenheit for about 60 minutes (sometimes it requires 65 or even 70 minutes), or until a toothpick inserted into the middle of the cake comes out clean.
Let the cake cool completely in the pan before adding the frosting.
In a large bowl with a hand mixer, whip together the cream cheese and butter until light and fluffy.
Add the powdered sugar one cup at a time and whip on high speed until smooth.
Add the half and half one spoonful at a time until a spreadable consistency is reached.
Spread the frosting over the completely cooled cake and top with chopped pistachios, if desired.
Slice and serve.