The Sort and the Index Seek are the most expensive nodes in IO without returning any rows. How could it be?
Remember this label is just an estimated cost. SQL Server didn't know, when determining the estimated cost, how many rows would actually be returned at runtime (it expected to sort 500+ rows). This mis-estimate is common throughout the plan, and likely has to do with the combination of UDF / APPLY / open-ended date range. On 2014 SP1 and up, you'd be able to generate the actual plan from within Plan Explorer, use our Live Query Profile feature, and after execution was complete we could re-label all of the operators, replacing the compiled, estimated costs with actual observed costs.