• Is there any way you can split this part of the data into a separate column?

    convert(nvarchar,keyvalue) like '%11857548%'

    Ideally, you'd want the 11857548 value in a column by itself so you could index it. The problem is that you're forcing a table scan by filtering like that. It's a non-SARGable query... you can't optimize it as is because you're asking something like "Show me all the people in the phone book with the first name of 'John'". Because the phone book is indexed by last name and then first name, you have to read the whole thing to find all the "Johns".

    If you split that part to a separate column and indexed that, you could immediately go to the 118... section and search there without reading the whole table (You'd read the index instead).