There is a method to do this that I am aware of (I thought of it a while back and my brain is peanut-sized so there's probably a much better solution) and I'll go over that.
To start, you need to first create a variable on join, that being an item variable that is equal to air. For those unaware of how to do this, you use a Set Item Type setvar. In there, place one should be the variable, place two should have any unmodified item (stone, dirt, grass, etc) and place three a text item "air". This will create an air item stores as a variable. After this, you need to create a list consisting of exactly 5 of that variable.
Once you have this set up, you likely want to place the code to prevent 2x2 crafting on a one-tick loop. First have an ifvar checking if the Open Inventory Title game value is equal to a text item "Crafting". Within that, place another ifvar, checking if your air list variable is not equal to the Inventory Menu Items game value. The reason this second ifvar checks if you have placed anything within the crafting grid, and the first ensures the code does not run if your inventory is not open - otherwise you get a nice little softlock.