Table valued function VS Stored procedure
If the data changes infrequently, package the fast-running SELECT as a view and define an index on it. 

An indexed view comes with some restrictions which minimally limits flexibility in future changes. There is nothing terribly bad, however.

If the data changes very often, and updates are performance-critical, the extra time to maintain the view may be a concern, but no more than for any other index.