This is not exactly the same thing, but it is similar.

Let $\lambda = (10,10,\dotsc,10)$, and $\mu=(4,4,\dotsc,4)$.
The non-tileability implies that the irreducible character, $\chi^{\lambda}(\mu)$ is $0$. Furthermore, since $\mu$ has all entries equal, turns out that $|\chi^{\lambda}(\mu)|$ is an upper bound on the number of tilings. See the Murnaghan-Nakayama rule for the connection.

Now, $|\chi^{\lambda}(\mu)|$ can in this case be computed via a Hook formula, see On the [Number of Rim Hook Tableaux by Fomin & Lulov][1]

With $n=100$, $r=4$, $m=25$, the first theorem in their paper then states that
$$
f^{\lambda}_r \leq \frac{m! r^m}{(n!)^{1/r}} (f^\lambda)^{1/r} 
$$
and since $|\chi^{\lambda}(\mu)| = f^{\lambda}_r$ in this case,
we get $\approx 2.78073*10^{16}$.

The number $f^{\lambda}_r$ count the number of ways to cover the 
the $10\times 10$-square with rim-hooks of size $4$, and 
*it keeps track of the order one adds the pieces*, such that the first $k$
pieces always form a Young diagram.
This disallow for some configurations, but since the order matters, 
$f^{\lambda}_r$ should be an upper bound.


EDIT: The following Mathematica code gives a "slightly" better bound of 3086:


	EMPTY=0;
	BLOCKED=-1;
	ModTetrisCoverings[pieces_List][board_List/;FreeQ[board,EMPTY],depth_:1]:=1;
	ModTetrisCoverings[pieces_List][board_List,depth_:0]:=Module[
	{putpos,IsOnBoardQ,IsEmptySpaceQ,w,h,shiftedPieces,goodPieces,newBoard,validConfs},

	IsOnBoardQ[piece_]:=And@@Flatten@{Thread[1<=(First/@piece)<=h],Thread[1<=(Last/@piece)<=w]};

	(* Check if piece only covers empty places. *)
	IsEmptySpaceQ[piece_]:=Union[board[[#1,#2]]&@@@piece]==={EMPTY};

	{h,w}=Dimensions[board];
	putpos=First@Position[board,EMPTY,2,1];

	shiftedPieces=Map[#+putpos&,pieces,{2}];
	goodPieces=Select[shiftedPieces,IsOnBoardQ[#]&&IsEmptySpaceQ[#]&];
	(* These are pieces that we may add so that they do not exceed board bounds,
	and covers only empty entries. *)

	(* If we found a leaf, return 1, otherwise, 
	return number of leaves of the branch process *)
	If[goodPieces=={},
	1
	,
	Sum[
	newBoard=ReplacePart[board,Thread[p->depth+1]];
	ModTetrisCoverings[pieces][newBoard,depth+1]
	,
	{p,goodPieces}]
	]
	];
	i4={{{0,0},{1,0},{2,0},{3,0}},{{0,0},{0,1},{0,2},{0,3}}};
	ModTetrisCoverings[i4][ConstantArray[EMPTY,{10,10}],1]

  [1]: https://link.springer.com/article/10.1007/BF02355806