Если обусловленность очень плохая, то всё плоха.
Если нет, то можно воспользоваться методом Гаусса в форме
разложения.
Есть алгоритмы переупорядочивания переменных(Джордж А., Лю Дж. "Численное решение больших разреженных систем уравнений", 1984). Наверно можно просто перенумеровать узлы, чтобы матрица сразу получилась близкой к диагональной (тогда можно использовать просто
разложение).
Есть итерационные методы с предобусловливанием(BiCGStab, GMRES и т.п.). Раз матрица близка к диагональной, то можно построить предобусловливатель в виде
не полного разложения, в профильном формате(строить только значения рядом с диагональю, где значения в исходной матрице достаточно большие) или разреженном, если диагональ не особо выражена. С таким предобусловливателем итерации могут быстро сойтись. Если СЛАУ решается много раз, а матрица не сильно меняется(не совсем понял исходную постановку задачи и метод решения), то может быть будет иметь смысл не на каждой итерации обновлять предобусловливатель. Если элементы исходной матрицы легко вычисляются, то иногда целесообразно вообще не хранить их в памяти.
Это написано просто как бред в свободном стиле.
Как уже отметили, проще всего взять готовый решатель, их куча открытых и бесплатных.