Might not be exactly what you're looking for, but Control.Arrow has a rich set of operators that can be used to combine functions.
For instance, there's an example on
http://en.wikibooks.org/wiki/Haskell/Understanding_arrows showing an addA function that can be used to apply two functions to the same argument and add the results:
Prelude> import Control.Arrow
Prelude Control.Arrow> let addA f g = f &&& g >>> arr (\ (y, z) -> y + z)
Prelude Control.Arrow> addA (+2) (*5) 10
62
If you're set on using the + and * operators, I'm guessing it's not possible to define a (sane) instance of Num for (->), but it would probably be instructive to try.