Preheat oven to 350 degrees F. Grease a 13x9 pan with nonstick baking spray, oil, or butter, then flour. Make sure to remove any excess flour.
Sift together flour and baking powder; set aside.
Cream together butter and coconut oil until light and fluffy on medium-high speed with an electric mixer. Slowly add sugar one cup at a time, making sure to fully incorporate each cup before adding another. Add eggs one at a time, making sure to fully incorporate each egg before adding another.
Pour milks and vanilla into measuring cup and whisk together with a fork. Add to butter and shortening mixture alternately with flour mixture, beginning and ending with dry ingredients.
Gently stir all ingredients until well combined, scraping down sides and bottom of bowl and making sure to have all ingredients mixed well.
Pour batter into prepared pan. Bake for 30 minutes, or until a toothpick or cake tester inserted in the center comes out clean.
Allow to cool for 5 minutes, then poke cake all over with a straw and pour half the can of sweetened condensed milk over the cake. Cover and place in fridge for one hour to absorb.
Meanwhile, combine ricotta cheese, mascarpone cheese and vanilla extract in a mixer bowl. Beat until smooth. Add powdered sugar and cinnamon, if using and mix until combined. Add reserved half can of sweetened condensed milk and mix again until combined.
Once cake has absorbed milk, spread cannoli topping evenly over cake. Top with pistachios or mini chocolate chips. Cover cake and allow to set in refrigerator for 2-3 hours. It should keep for 4-5 days.