Problem:
I have a production SharePoint farm that contains 10 web front ends with dedicated redundant distributed cache servers and BLOB cache configured, recently I developed an ASCX control to retrieve only 1 item from a SP list that contains more than 11K items, the retrieval of the item is based on a CAML query (server-side code), the query takes 2 parameters (ID and Mobile number).
on submit button click event, I am checking if the item is there or not with a boolean function as below:
if (CheckItems())
                {
                    
                    lblSuccessMsg.Text = "Applicant Name " + ApplicantName + " " + "ID number " + fID + " " + "Mobile number " + fMobile +
                        "<br/>" +
                        "<br/>" +
                        "<div class='mainDetail'>" +
                        "<div class='details'>Subject: <span>" + Subject + "</span></div><br/>" + "<div class='details'>Stage: <span>" + Stage + "</span></div><br/>" + "<div class='details'>Job: <span>" + Job + "</span>" + "</div>";
                        ...etc
                }
                else
                {
                    
                    lblFailMsg.Text = "no data exists";
                }
Boolean function:
private bool CheckItems()
    {
        
            using (SPSite oSPSite = new SPSite(SPContext.Current.Site.Url))
            {
                using (SPWeb oSPWeb = oSPSite.OpenWeb("relativeurl"))
                {
                    SPListItemCollectionPosition position = null;
                    do
                    {
                        SPList ApplicantsList = oSPWeb.Lists["listname"];
                        SPQuery spQuery = new SPQuery();
                        spQuery.Query = "<Where><And><Eq><FieldRef Name='NationalID' /><Value Type='Text'>" + txtNationalID.Text + "</Value></Eq><Eq><FieldRef Name='MobileNo' /><Value Type='Text'>" + txtMobileNo.Text + "</Value></Eq></And></Where><RowLimit>100</RowLimit>";
                        SPListItemCollection items = ApplicantsList.GetItems(spQuery);
                    
                        position = items.ListItemCollectionPosition;
                        if (items.Count > 0)
                        {
                        for(int i = 0; i < 100 && i < items.Count; i++)
                        {
                            SPListItem item = items[i];
                            ApplicantName = item["applicantName"] != null ? item["applicantName"].ToString() : "no data";
                            NationalID = item["NationalID"] != null ? item["NationalID"].ToString() : "no data";
                            MobileNo = item["MobileNo"] != null ? item["MobileNo"].ToString() : "no data";
                            Subject = item["Subject"] != null ? item["Subject"].ToString() : "no data";
                            Stage = item["Stage"] != null ? item["Stage"].ToString() : "no data";
                            Job = item["Job"] != null ? item["Job"].ToString() : "no data";
                          
                        }
                            return true;
                        }
                        else
                        {
                            return false;
                        }
         
                    }
                    while (position != null);
                }
            }
    }
My questions is:
Is there any problem with the CAML query its self, will it make any bottlenecks/slowness in performance or causing the site to be unavailable?, where this query should be run by large number of users , let's say around 100K users, does the query in the boolean function needs optimization or any further enhancement?
Note: The fields being used in the query are indexed in the SharePoint list.
Your help is much appreciated.