دلیل مشکل شما این هست که در کلاس DataRowCollection برای دسترسی به سطرها از نوع int به عنوان ایندکس استفاده شده.شاید طراح این کلاس نظرش این بوده که int کفایت میکنه ولی شما یک مثال نقص شدی. در کل راه حل مستقیم برای مشکل شما وجود نداره. شاید به قول دوستمون foreach بتونه مشکل شما رو حل کنه ولی در این حالت دسترسی مستقیم به هر ردیف وجود نداره.به نظر من شما نیاز داری یک کلاس(به عنوان مثال BigTable) بنویسی که به جای یک تیبل از چند تیبل برای ذخیره اطلاعات استفاده کنه و در هر تیبل به اندازه int.MaxValue سطر نگهداری بشه. بعد هر ایندکسی که بهش داده میشه رو محاسبه کنه ردیف چندم از کدوم تیبل هست. نهایتا باید کلاسی باشه که بتونه این مورد رو مدیریت کنه و در عین حال به عنوان یک تیبل بزرگ هم دیده بشه.
باز هم در تایید حرف دوستان من هم میگم که نگهداری این حجم از دیتا در برنامه کار منطقی به نظر نمیاد. شاید دلیل محکمی برای اینکار دارید در غیر اینصورت بهتره در طراحی این قسمت برنامه یک بازنگری بکنید.
موفق باشید.