Seeing as your question asked how this function can be composed from other functions, I would like to point out that you can write it as:
import Control.Arrow
on2 :: (b -> b -> c) -> (a -> b) -> (a -> b) -> a -> a -> c
on2 f g h = curry (uncurry f . (g *** h))
However, the straightforward definition suggested by bheklilr is obviously just as concise and much more readable for people who are not used to working with Arrows.
And, yes, as far as I know, Hoogle does also search for functions in which the order of argument types you specified is permuted.