In some rare cases this query will return in-correct result, because in syscomments table the text column is of type nvarchar(4000). If the sp text is exceeding this limit, sp text is split and stored in the multiple rows, and if the seach string is at the spliting position, then search will fail to return such stored procedure name.
Also in the query you are not getting the sp content and that is the reason you are assuming it is much faster. But when I executed below query, found that it is much slower and also leading to lot of logical reads also...
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT DISTINCT so.name
FROM dbo.sysobjects so
inner join .dbo.syscomments sc on so.id=sc.id
WHERE so.xtype='P' AND sc.text like '%SearchString%'
WHERE OBJECT_DEFINITION(object_id) LIKE '%SearchString%'
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
Last Visit: 31-Dec-99 19:00 Last Update: 26-Nov-15 9:21