Your speedo is definitely not accurate. I would assume you're losing some performance because of it too. Shift points will be off, etc.
Dealership job, or other options? When I first got the truck I was averaging about 16, after it broke in I was getting nearly 20. Now it has shot down to about 16 again. Other than tires, and an oil change nothing has changed.
As far as programming for tire size, as far as I know, a dealer can’t program for an oversized tire like that. Only another factory tire size. I can tell you for sure that Dodge and Ford dealers can’t do it. I assume the same for a GM dealer.