Thomas,
Performance of your OData call is not dependent on how you call the service ($filter or fetching-by-key). Rather it is dependent on how you implement/code those.
Your OData model should be driven by the UI5 application, and then you implement each method by calling the right API in backend/ABAP.
If a GUID cannot identify a single record, but you require all work items related to GUID, then you should use $filter. And in the backend implementation/code, put a external breakpoint and debug to find out where it fails.
Thanks
Krishna