maneira mais rápida de comparar 2 objetos, excluindo algumas propriedades?

Tenho um site em que os usuários enviam dados para ele e só quero atualizar dados em que as propriedades foram alteradas. Portanto, estou comparando dois objetos do mesmo tipo para alterações e preciso excluir algumas propriedades, como ModifiedOn, que é uma dat

Aqui está o meu código até agora usando reflexão:

 private bool hasChanges(object OldObject, object newObject)
        {
            var oldprops = (from p in OldObject.GetType().GetProperties() select p).ToList();
            var newprops = (from p in newObject.GetType().GetProperties() select p).ToList();
            bool isChanged = false;
            foreach (PropertyInfo i in oldprops)
            {
                if (checkColumnNames(i.Name))
                {
                    var newInfo = (from x in newprops where x.Name == i.Name select x).Single();
                    var oldVal = i.GetValue(OldObject, null);
                    var newVal = newInfo.GetValue(newObject, null);

                    if (newVal == null || oldVal == null)
                    {
                        if (newVal == null && oldVal != null)
                        {
                            isChanged = true;
                            return true;
                        }
                        if (oldVal == null && newVal != null)
                        {
                            isChanged = true;
                              return true;
                        }
                    }
                    else
                    {
                        if (!newVal.Equals(oldVal))
                        {
                            isChanged = true;
                         return true;
                        }
                    }
                }
            }

            return isChanged;
        }

Ignoro determinadas colunas com este método:

private bool checkColumnNames(string colName)
        {
            if (
                colName.ToLower() == "productid" ||
                colName.ToLower() == "customerid" ||
                colName.ToLower() == "shiptoid" ||
                colName.ToLower() == "parentchildid" ||
                colName.ToLower() == "categoryitemid" ||
                 colName.ToLower() == "volumepricingid" ||
                colName.ToLower() == "tagid" ||
                colName.ToLower() == "specialprice" ||
                colName.ToLower() == "productsmodifierid" ||
                colName.ToLower() == "modifierlistitemid" ||
                colName.ToLower() == "modifierlistid" ||
                colName.ToLower() == "categoryitemid" ||
                colName.ToLower() == "createdon" ||
                colName.ToLower() == "createdby" ||
                colName.ToLower() == "modifiedon" ||
                colName.ToLower() == "modifiedby" ||
                colName.ToLower() == "deletedon" ||
                colName.ToLower() == "deletedby" ||
                colName.ToLower() == "appendproductmodifiers" ||
                colName.ToLower() == "introdate" ||
                colName.ToLower() == "id" ||
                colName.ToLower() == "discontinued" ||
                colName.ToLower() == "stagingcategories"
                )
                return false;

            return true;
        }

Isso tem funcionado muito bem, exceto que agora eu tenho usuários comparando mais de 50.000 itens em um único upload, o que está demorando muito temp

Existe uma maneira mais rápida de conseguir isso?