Microsoft SQL Server, which I can only assume you're using, offers a timestamp data type.
You can use this data type to detect and account for changes in records, and increase support for concurrent users, which as far as I can tell, is your greatest concern.
You seem to question the method you're currently using, and you're very much justified. Using view state in that manor is a poor choice, nevermind with that much data.
The best approach to this is to determine if the project absolutely requires this level of functionality. The vast majority of applications do not require each and every update to be checked against the database for the sake of detecting recent changes made by other users. For those of us familiar with ADO and various other database libraries, we know that record locking can and will cause more problems than it will ever solve. I'm not claiming this is what you're trying to do, but history does apply here. By accounting for other concurrent users, the application is going to increase in its complexity. In short, ask yourself if you really need this.
With that said, you'll find that a solution using timestamp columns and notifications to the UI will work quite well. If a user submits changes to a record, simply check the timestamp and prompt them to take further action. Those actions include viewing the current record, merging the records or disposing either the current record or their record. Again, these choices increase the complexity of your application's business logic and presentation layer (the changes to the database layer are actually rather minimal).