In fact, including a dummy variable for when one of the explanatory variables is equal to zero will only improve the model if the reason there is a spike at zero also means your assumptions about the relationship between the variables are invalidated at that point. Otherwise you just have lots of variables with a common value for that explanatory variable, and there's nothing wrong with that.
Two common situations where the spike at zero does invalidate the assumed relationship are when zero really means either "unobserved" (true value was missed); or "truncated" (eg it really would have been a negative value if it could but can't go below zero). In your case for example, perhaps you are using media articles as a proxy for interest in a particular issue or country; your proxy measure can't go below zero, even though there may be differing degrees of lack of interest reflected by that variable.
Consider the situation where in a certain number of cases zero really means the true value was not observed. In the plot below I generated data where there was a real, linear relationship between two variables, and then set 50% of the explanatory variables to zero to reflect a flawed observational process. You can see how if we just fit a linear model to the observed data the result is quite far from the true relationship of the underlying (partly unobserved data).
The principles are very similar when zero really stands in for a negative value but your observational process truncates it at zero (which might be your situation); except the bias in slope would be the other direction to that illustrated below.
Conversely, imagine a case where the spike at zero is a natural result of the data generating mechanism. Adding a dummy makes no difference:
This would apply whether the large number of zeros is created by a nicely behaved distribution (as here, with Poisson(0.7) ) or were arbitrarily created - so long as they are set to zero before the response variable is generated based on its values.
(BTW why assume the relationship is linear? but that's another question).
Code in R that produced this is below.
demo_zero <- function(n=100, prob=.5, lam, ...){
# demonstrate what happens when a proportion prob of an explanatory variable
# is wrongly observed as zero, independently of the generation of a
# response variable
require(RColorBrewer)
# Create a palette
P <- brewer.pal(7, "Dark2")
n <- 100
# True data generating process
x_true <- rpois(n, lam)
y <- 1000 + 20 * x_true + rnorm(n,0,30)
# Contaminate the Xs with some zeroes
x_observed <- ifelse(runif(n) > prob, x_true, 0)
# Create a dummy variable for when the observed x is zero
dummy <- x_observed==0
plot(x_observed, y, bty="l", xlim=c(0,9), ...)
grid()
abline(lm(y ~ x_true), lty=1, col=P[1])
abline(lm(y ~ x_observed), lty=2, col=P[2])
# will generate warning but is ok:
abline(lm(y ~ x_observed + dummy), lty=3, col=P[3])
legend(5,1050, c("True", "No dummy", "Fitted with dummy"), lty=1:3, col=P[1:3], bty="n", lwd=2)
}
demo_zero(prob=0.5, lam=3, main="50% contamination")
demo_zero(prob=.0, lam=.7, main="No contamination")