The franchise tag for two years will probably be the best business decision the Cardinals can make on David Johnson. Giving a 5 year deal with a bunch of guaranteed money to a 27 year old RB is not a smart business option.
Look at it this way...
Right now, David Johnson has a 3 year deal totaling 27.2 mil. It breaks down to 800k for 2018, 12 mil (ish) for a team option in 2019, and 14.4 (ish) mil for a team option in 2020. Those team options are for the franchise tag. That would pay him until he is 29 years old. He will turn 30 at the end of the 2021 season. If you wanted to cut him prior to the league year, you would suffer zero dead money against your cap.
If you gave him a 5 year deal today, it would likely average $10 per year which would fit his rank in terms of NFL RBs. Even in a team friendly deal, you are creating dead money unless you want to pay him a top RB salary at the ages of 30 and 31. You are also losing your ability to improve the roster in 2018 because you are inflating his salary from 800k to approx 7 mil, roughly 6.2 mil. You would gain 3.5 mil in cap space in 2019, and then 4.4 in cap space in 2020, but again we still have him on the books for 11.5 in 2021, and 13 in 2022 when he turns 31 at the end of the season.
It just doesn't really make sense from a team aspect unless David Johnson agrees to an under-market value deal. The problem is that if he did, Johnson would want more guaranteed money to do so, and that would lead to dead space for the Cardinals later.