After reading this, there is a quote that stood out:
BSON is also designed to be fast to encode and decode. For example, integers are stored as 32 (or
I believe Node.js and most browsers are the exception.
The simple answer is the JSON parser/serializer/deserializer (i.e. V8) are extremely optimized and are written in C/C++. The BSON parser is written in JavaScript. But even if the parser is written native (and I believe BSON has one) JSON still will probably win given how optimized V8 is for JSON.
If you use a platform like Java or C# the BSON format is probably going to be faster.
See @Matthais247 who answered after me but much more completely.