try to split the query to find the slowest part.
Note : the startswith, i think to remember, is quite slow, may be its faster a contains or even a indexof, the result is that you search the whole part, not the begining, so the rendering could be slower, if you don't want that, you can make a "equals" comparison between your txtCode and a substring(0, length) of the CODE/NAME, and test if is faster than statswith.
var stopWatch = new System.Diagnostics.Stopwatch();
stopWatch.Start();
var tempLstSearch = lstGetResult;
var txtCode = txtCode.Text.Trim();
stopWatch.Stop();
var ts1 = stopWatch.Elapsed;
if(txtCode.Length > 0)
{
tempLstSearch = tempLstSearch.Where(i=> (
(i.CODE.IndexOf(txtCode,System.StringComparison.CurrentCultureIgnoreCase) >= 0)
||
(i.NAME.IndexOf(txtCode,System.StringComparison.CurrentCultureIgnoreCase) >= 0)
));
stopWatch.Stop();
var ts2 = stopWatch.Elapsed;
}
var search = From s In tempLstSearch
Select New SPGet_Result With {.CODE = s.CODE, .NAME = s.NAME};
stopWatch.Stop();
varts3 = stopWatch.Elapsed;
var lstSearch = search.ToList()
stopWatch.Stop();
var ts4 = stopWatch.Elapsed;