Firstly,
this is not documented. As a thumb-rule, salesforce always insists to use ONLY what is documented. So, this may some day be made invalid by salesforce the sameway they did Prevent Creation of Function Expressions in Dynamically Created Aura Components (Critical Update). Although passing function expressions in attributes (properties) of dynamically created components seemed normal, it seems it created memory leaks and they considered it anti pattern (The same way you are passing function expressions to javascript properties in child component). So, even what you are suggesting may become invalid someday according to LWC coding practices as its not documented.
Secondly,
this way of implementing communication is very very limited to strictly child-parent relationship.
Scenario-1: it works in this scenario
<c-parent>
<c-child>
Scenario-2: if you want to use same child or parent in another flow, you will have to implement another relationship between parent/container and container/child
<c-parent>
<c-container>
<c-child>
Clearly, it will lead to much more complicated code compared to events.
Regarding performance difference, its negligible. You just pass data from 1 component to another and a user will never notice any kind of delay or fastness when you choose one over the other.
Conclusion: I would suggest events is the best way to implement communication for bottom up in hierarchy considering above 2 points.
LMS is for communication across DOM which means that it is for the component which is on the same tab but can be a VF in an iframe, or aura component. This is evident from the section When should I use LMS?
If you want to communicate between pages on different tabs, you will need to rely on session storage
and events.
If you’ve tried putting a Visualforce page in Lightning Experience and
you dreaded figuring out how to work with raw iframes and postMessage
to speak to Lightning Components, this service is for you. Our hope is
that developers will see value in this handy service and integrate
their existing Visualforce-based UIs into Lightning Experience with
first-class communication.
Ask yourself, is there any time you want your Visualforce page to
communicate with components on its containing Lightning Page? Those
components can be Lightning Web Components, Aura Components or other
Visualforce pages on the same Lightning Page. If so, you can’t go
wrong with LMS.
Best Answer
In most cases, it is preferable to use props/events over pub/sub when communicating between sibling components.
The main issue with pub/sub is that it creates an implicit coupling between the child component. This implicit coupling makes the child components less reusable and harder to test.
For more information on this topic, I would recommend checking out the Step up your LWC skills - part 1. Disclaimer, I am the author of this blog post.