To solve this problem, we put characteristic scale L=300 and then rescale all geometrical parameters on L, as result we have
Needs["NDSolve`FEM`"]; (*geometry*)L = 300; sizes = {length -> 300, height -> 280, ductW -> 10, offsetx1 -> 5, offsetx2 -> 130, offsety1 -> 30, offsety2 -> 1, offsety3 -> 4, slab -> 1, r -> 8/10}; sizes[[All, 2]] = sizes[[All, 2]]/L; sizes; \[CapitalOmega]1 = Rectangle[{0, 0}, {length, height}] /. sizes; \[CapitalOmega]d1 = Rectangle[{ductW, height - offsety1 - slab}, {ductW + 3*slab + offsetx1, height - offsety1}] /. sizes; \[CapitalOmega]d2 = Rectangle[{ductW, height/2}, {ductW + slab, height - offsety1}] /. sizes; \[CapitalOmega]d = RegionUnion[\[CapitalOmega]d1, \[CapitalOmega]d2]; (*duct surfaces*) ds = First@{(ductW <= x <= ductW + slab && y == height/2) || (ductW <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1) || (height/2 <= y <= height - offsety1 && x == ductW) || (height/2 <= y <= height - offsety1 - slab && x == ductW + slab) || (height - offsety1 - slab <= y <= height - offsety1 && x == ductW + 3*slab + offsetx1) || (ductW + slab <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1 - slab)} /. sizes; tubes = Table[{Disk[{ductW + slab, height - offsety2 - n*offsety3}, r], Disk[{ductW + slab + offsetx1, height - offsety2 - n*offsety3}, r]}, {n, 0, 7}] /. sizes; (*tube surfaces*) t1 = Table[(x - (ductW + slab))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; t2 = Table[(x - (ductW + slab + offsetx1))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; (*put into a form appropriate for bcs*) ts = t1[[1]] || t1[[2]] || t1[[3]] || t1[[4]] || t1[[5]] || t1[[6]] || t1[[7]] || t1[[8]] || t2[[1]] || t2[[2]] || t2[[3]] || t2[[4]] || t2[[5]] || t2[[6]] || t2[[7]] || t2[[8]]; \[CapitalOmega]3 = RegionDifference[\[CapitalOmega]1, RegionUnion[Flatten@tubes]]; \[CapitalOmega] = RegionDifference[\[CapitalOmega]3, \[CapitalOmega]d]; (*mesh*) mesh = ToElementMesh[\[CapitalOmega], MaxCellMeasure -> .01, "MaxBoundaryCellMeasure" -> .01(*1*), AccuracyGoal -> 5]; mesh["Wireframe"]

HSsurf = First[{(130/L <= x <= 170/L && y == 170/L) || (0 <= y <= 170/L && x == 130/L) || (0 <= y <= 170/L && x == 170/L)}]; HS = With[{q = 10}, If[130/L <= x <= 170/L && 0 <= y <= 170/L, q, 0]]; parameters = {Pr -> 0.7, Ra -> 10^6}; op = {Derivative[1, 0, 0][u][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][u[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][u[t, x, y], {x, y}] + Derivative[0, 1, 0][p][t, x, y], Derivative[1, 0, 0][v][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][v[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][v[t, x, y], {x, y}] + Derivative[0, 0, 1][p][t, x, y] - Ra*Pr*T[t, x, y], Derivative[0, 1, 0][u][t, x, y] + Derivative[0, 0, 1][v][t, x, y], Derivative[1, 0, 0][T][t, x, y] + Inactive[Div][-Inactive[Grad][T[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][T[t, x, y], {x, y}]} /. parameters; walls = {DirichletCondition[{u[t, x, y] == 0, v[t, x, y] == 0}, ts || x == 0 || x == length || y == 0 || y == height || ds || HSsurf]} /. sizes; reference = DirichletCondition[p[t, x, y] == 0, x == 0 && y == 0]; bcsflow = {walls, reference}; bcstemperatures = {DirichletCondition[T[t, x, y] == 0, ts]}; ic = {u[0, x, y] == 0, v[0, x, y] == 0, p[0, x, y] == 0, T[0, x, y] == 0}; tmax = 1; Monitor[AbsoluteTiming[{xVel, yVel, pressure, temperature} = NDSolveValue[Flatten[{op == {0, 0, 0, HS}, bcsflow, bcstemperatures, ic}], {u, v, p, T}, Element[{x, y}, mesh], {t, 0, tmax}, Method -> {"TimeIntegration" -> {"IDA", "MaxDifferenceOrder" -> 2}, "PDEDiscretization" -> {"MethodOfLines", "SpatialDiscretization" -> {"FiniteElement", "InterpolationOrder" -> {u -> 2, v -> 2, p -> 1, T -> 2}}}}, EvaluationMonitor :> (currentTime = Row[{"t=", CForm[t]}])]; ], currentTime]
It takes about 450s on my Silver Pentium. Visualization
ContourPlot[temperature[1, x, y], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, ContourStyle -> None, Contours -> 20]

Show[DensityPlot[ Norm[{xVel[1, x, y], yVel[1, x, y]}], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, PlotPoints -> 100], StreamPlot[{xVel[1, x, y], yVel[1, x, y]}, {x, y} \[Element] mesh, ColorFunction -> None, StreamStyle -> LightGray]]

Update 1. To simulate the source as a solid-block heater we can use as a first step next model
Needs["NDSolve`FEM`"]; (*geometry*)L = 300; sizes = {length -> 300, height -> 280, ductW -> 10, offsetx1 -> 5, offsetx2 -> 130, offsety1 -> 30, offsety2 -> 1, offsety3 -> 4, slab -> 1, r -> 8/10}; sizes[[All, 2]] = sizes[[All, 2]]/L; sizes; \[CapitalOmega]1 = Rectangle[{0, 0}, {length, height}] /. sizes; \[CapitalOmega]d1 = Rectangle[{ductW, height - offsety1 - slab}, {ductW + 3*slab + offsetx1, height - offsety1}] /. sizes; \[CapitalOmega]d2 = Rectangle[{ductW, height/2}, {ductW + slab, height - offsety1}] /. sizes; \[CapitalOmega]d = RegionUnion[\[CapitalOmega]d1, \[CapitalOmega]d2]; (*duct surfaces*) ds = First@{(ductW <= x <= ductW + slab && y == height/2) || (ductW <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1) || (height/2 <= y <= height - offsety1 && x == ductW) || (height/2 <= y <= height - offsety1 - slab && x == ductW + slab) || (height - offsety1 - slab <= y <= height - offsety1 && x == ductW + 3*slab + offsetx1) || (ductW + slab <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1 - slab)} /. sizes; tubes = Table[{Disk[{ductW + slab, height - offsety2 - n*offsety3}, r], Disk[{ductW + slab + offsetx1, height - offsety2 - n*offsety3}, r]}, {n, 0, 7}] /. sizes; (*tube surfaces*) t1 = Table[(x - (ductW + slab))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; t2 = Table[(x - (ductW + slab + offsetx1))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; (*put into a form appropriate for bcs*) ts = t1[[1]] || t1[[2]] || t1[[3]] || t1[[4]] || t1[[5]] || t1[[6]] || t1[[7]] || t1[[8]] || t2[[1]] || t2[[2]] || t2[[3]] || t2[[4]] || t2[[5]] || t2[[6]] || t2[[7]] || t2[[8]]; HSsurf = First[{(130/L <= x <= 170/L && y == 170/L) || (0 <= y <= 170/L && x == 130/L) || (0 <= y <= 170/L && x == 170/L)}]; HS = ImplicitRegion[130/L <= x <= 170/L && 0 <= y <= 170/L, {x, y}]; \[CapitalOmega]3 = RegionDifference[\[CapitalOmega]1, RegionUnion[Flatten@tubes]]; \[CapitalOmega]4 = RegionDifference[\[CapitalOmega]3, HS]; \[CapitalOmega] = RegionDifference[\[CapitalOmega]4, \[CapitalOmega]d]; (*mesh*) mesh = ToElementMesh[\[CapitalOmega], MaxCellMeasure -> .01, "MaxBoundaryCellMeasure" -> .01(*1*), AccuracyGoal -> 5]; mesh["Wireframe"]

parameters = {Pr -> 0.7, Ra -> 10^6}; op = {Derivative[1, 0, 0][u][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][u[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][u[t, x, y], {x, y}] + Derivative[0, 1, 0][p][t, x, y], Derivative[1, 0, 0][v][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][v[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][v[t, x, y], {x, y}] + Derivative[0, 0, 1][p][t, x, y] - Ra*Pr*T[t, x, y], Derivative[0, 1, 0][u][t, x, y] + Derivative[0, 0, 1][v][t, x, y], Derivative[1, 0, 0][T][t, x, y] + Inactive[Div][-Inactive[Grad][T[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][T[t, x, y], {x, y}]} /. parameters; walls = {DirichletCondition[{u[t, x, y] == 0, v[t, x, y] == 0}, ts || x == 0 || x == length || y == 0 || y == height || ds || HSsurf]} /. sizes; reference = DirichletCondition[p[t, x, y] == 0, x == 0 && y == 0]; bcsflow = {walls, reference}; bcstemperatures = {DirichletCondition[T[t, x, y] == 0, ts],DirichletCondition[T[t, x, y] == 1, HSsurf]}; ic = {u[0, x, y] == 0, v[0, x, y] == 0, p[0, x, y] == 0, T[0, x, y] == 0}; tmax = 1; Monitor[AbsoluteTiming[{xVel, yVel, pressure, temperature} = NDSolveValue[Flatten[{op == {0, 0, 0,0 }, bcsflow, bcstemperatures, ic}], {u, v, p, T}, Element[{x, y}, mesh], {t, 0, tmax}, Method -> {"TimeIntegration" -> {"IDA", "MaxDifferenceOrder" -> 2}, "PDEDiscretization" -> {"MethodOfLines", "SpatialDiscretization" -> {"FiniteElement", "InterpolationOrder" -> {u -> 2, v -> 2, p -> 1, T -> 2}}}}, EvaluationMonitor :> (currentTime = Row[{"t=", CForm[t]}])]; ], currentTime]
It takes about 222s. Visualization
ContourPlot[temperature[1, x, y], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, ContourStyle -> None, Contours -> 20]

Show[DensityPlot[ Norm[{xVel[1, x, y], yVel[1, x, y]}], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, PlotPoints -> 100], StreamPlot[{xVel[1, x, y], yVel[1, x, y]}, {x, y} \[Element] mesh, ColorFunction -> None, StreamStyle -> LightGray]]

Update 2. We can resolve small disks even better using MeshRefinementFunction to generate mesh as follows
(*geometry*)L = 300; sizes = {length -> 300, height -> 280, ductW -> 10, offsetx1 -> 5, offsetx2 -> 130, offsety1 -> 30, offsety2 -> 1, offsety3 -> 4, slab -> 1, r -> 8/10}; sizes[[All, 2]] = sizes[[All, 2]]/L; \[CapitalOmega]1 = Rectangle[{0, 0}, {length, height}] /. sizes; \[CapitalOmega]d1 = Rectangle[{ductW, height - offsety1 - slab}, {ductW + 3*slab + offsetx1, height - offsety1}] /. sizes; \[CapitalOmega]d2 = Rectangle[{ductW, height/2}, {ductW + slab, height - offsety1}] /. sizes; \[CapitalOmega]d = RegionUnion[\[CapitalOmega]d1, \[CapitalOmega]d2]; (*duct surfaces*) ds = First@{(ductW <= x <= ductW + slab && y == height/2) || (ductW <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1) || (height/2 <= y <= height - offsety1 && x == ductW) || (height/2 <= y <= height - offsety1 - slab && x == ductW + slab) || (height - offsety1 - slab <= y <= height - offsety1 && x == ductW + 3*slab + offsetx1) || (ductW + slab <= x <= ductW + 3*slab + offsetx1 && y == height - offsety1 - slab)} /. sizes; tubes = Table[{Disk[{ductW + slab, height - offsety2 - n*offsety3}, r], Disk[{ductW + slab + offsetx1, height - offsety2 - n*offsety3}, r]}, {n, 0, 7}] /. sizes; (*tube surfaces*) t1 = Table[(x - (ductW + slab))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; t2 = Table[(x - (ductW + slab + offsetx1))^2 + (y - (height - offsety2 - n*offsety3))^2 <= r^2, {n, 0, 7}] /. sizes; (*put into a form appropriate for bcs*) ts = t1[[1]] || t1[[2]] || t1[[3]] || t1[[4]] || t1[[5]] || t1[[6]] || t1[[7]] || t1[[8]] || t2[[1]] || t2[[2]] || t2[[3]] || t2[[4]] || t2[[5]] || t2[[6]] || t2[[7]] || t2[[8]]; HSsurf = First[{(130/L <= x <= 170/L && y == 170/L) || (0 <= y <= 170/L && x == 130/L) || (0 <= y <= 170/L && x == 170/L)}]; HS = ImplicitRegion[130/L <= x <= 170/L && 0 <= y <= 170/L, {x, y}]; \[CapitalOmega]3 = RegionDifference[\[CapitalOmega]1, RegionUnion[Flatten@tubes]]; \[CapitalOmega]4 = RegionDifference[\[CapitalOmega]3, HS]; \[CapitalOmega] = RegionDifference[\[CapitalOmega]4, \[CapitalOmega]d]; (*mesh*)f = Function[{vertices, area}, Block[{x, y}, {x, y} = Mean[vertices]; If[0 <= x <= ductW + 3*slab + offsetx1 && y >= 0.4, area > .00001, area > 0.01]]]; mesh = ToElementMesh[\[CapitalOmega], AccuracyGoal -> 5, MeshRefinementFunction -> f /. sizes] mesh["Wireframe"]

parameters = {Pr -> 0.7, Ra -> 10^6}; op = {Derivative[1, 0, 0][u][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][u[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][u[t, x, y], {x, y}] + Derivative[0, 1, 0][p][t, x, y], Derivative[1, 0, 0][v][t, x, y] + Inactive[Div][(-Pr)*Inactive[Grad][v[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][v[t, x, y], {x, y}] + Derivative[0, 0, 1][p][t, x, y] - Ra*Pr*T[t, x, y], Derivative[0, 1, 0][u][t, x, y] + Derivative[0, 0, 1][v][t, x, y], Derivative[1, 0, 0][T][t, x, y] + Inactive[Div][-Inactive[Grad][T[t, x, y], {x, y}], {x, y}] + {u[t, x, y], v[t, x, y]} . Inactive[Grad][T[t, x, y], {x, y}]} /. parameters; walls = {DirichletCondition[{u[t, x, y] == 0, v[t, x, y] == 0}, ts || x == 0 || x == length || y == 0 || y == height || ds || HSsurf]} /. sizes; reference = DirichletCondition[p[t, x, y] == 0, x == 0 && y == 0]; bcsflow = {walls, reference}; bcstemperatures = {DirichletCondition[T[t, x, y] == 0, ts],DirichletCondition[T[t, x, y] == 1, HSsurf]}; ic = {u[0, x, y] == 0, v[0, x, y] == 0, p[0, x, y] == 0, T[0, x, y] == 0}; tmax = 1; Monitor[AbsoluteTiming[{xVel, yVel, pressure, temperature} = NDSolveValue[Flatten[{op == {0, 0, 0,0 }, bcsflow, bcstemperatures, ic}], {u, v, p, T}, Element[{x, y}, mesh], {t, 0, tmax}, Method -> {"TimeIntegration" -> {"IDA", "MaxDifferenceOrder" -> 2}, "PDEDiscretization" -> {"MethodOfLines", "SpatialDiscretization" -> {"FiniteElement", "InterpolationOrder" -> {u -> 2, v -> 2, p -> 1, T -> 2}}}}, EvaluationMonitor :> (currentTime = Row[{"t=", CForm[t]}])]; ], currentTime]
It takes 226s on my laptop. Visualization
{ContourPlot[temperature[1, x, y], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, ContourStyle -> None, Contours -> 20], Show[DensityPlot[ Norm[{xVel[1, x, y], yVel[1, x, y]}], {x, y} \[Element] mesh, ColorFunction -> "Rainbow", PlotLegends -> Automatic, PlotRange -> All, PlotPoints -> 100], StreamPlot[{xVel[1, x, y], yVel[1, x, y]}, {x, y} \[Element] mesh, ColorFunction -> None, StreamStyle -> LightGray]]}

This is not much different from the previous case, but this one is easier to manage mesh.
lengthto defineRa. Therefore, region in nondimensional form haslength=1. Since you takelength -> 300, effectively in your problem Ra= 10^6 length^3=2.7 10^13. No one can solve this problem:). $\endgroup$Rais proportional tol^3. Here,length -> 300is the width of the domain, but not necessary to be the characteristic length. Could we take a smallerlto be a characteristic length, say the width of the disk array,offsetx1->5? $\endgroup$