Speed impact of using varchar in SQL Server 2008
You are confusing text/varchar(max) (LOB types) with varchar(n)/char(n)


LOB types will still be stored in-row/out-of-row based on size, UPDATE, sp_tableoption etc
varchar(n)/char(n)  have always been "in-row"


Otherwise, if you use char(1000) not varchar(1000) and the average data length is, say, 42 this is bad design and a lot of wasted space.