There are other performance implications aside from raw speed as well -- e.g. marshal lets you recover sharing, but bin-prot does not.
That being said, the general opinion is that it's worth paying the price in most cases to use bin-prot. Getting an exception rather than a segfault is nice. Also, and more importantly, it is very obvious which types bin-prot nicely (simply those with a bin_t value), and much less obvious which types marshal nicely -- e.g. I seem to recall there are some gotchas when marshalling lazy_t, which means that every type that uses lazy_t under the hood inherits those weirdnesses, even though that might not be obvious in the interface of that type.
We still use marshal where its superior performance is important, but you have to be very careful. So bin-prot is a good default for most applications. "Predictable semantics > performance, in most cases".