I think this issue has been discussed before on this site fairly thoroughly, if you just knew where to look. So I will probably add a comment later with some links to other questions, or may edit this to provide a fuller explanation if I can't find any.
There are two basic possibilities: First, the other IV may absorb some of the residual variability and thus increase the power of the statistical test of the initial IV. The second possibility is that you have a suppressor variable. This is a very counter-intuitive topic, but you can find some info here*, here or this excellent CV thread.
* Note that you need to read all the way through to the bottom to get to the part that explains suppressor variables, you could just skip ahead to there, but you will be best served by reading the whole thing.
Edit: as promised, I'm adding a fuller explanation of my point regarding how the other IV can absorb some of the residual variability and thus increasing the power of the statistical test of the initial IV. @whuber added an impressive example, but I thought I might add a complimentary example that explains this phenomenon in a different way, which may help some people understand the phenomenon more clearly. In addition, I demonstrate that the second IV does not have to be more strongly associated (although, in practice, it almost always will be for this phenomenon to occur).
Covariates in a regression model can be tested with $t$-tests by dividing the parameter estimate by its standard error, or they can be tested with $F$-tests by partitioning the sums of squares. When type III SS are used, these two testing methods will be equivalent (for more on types of SS and associated tests, it may help to read my answer here: How to interpret type I SS). For those just starting to learn about regression methods, the $t$-tests are often the focus because they seem easier for people to understand. However, this is a case where I think looking at the ANOVA table is more helpful. Let's recall the basic ANOVA table for a simple regression model:
\begin{array}{lllll}
&\text{Source} &\text{SS} &\text{df} &\text{MS} &\text{F} \\
\hline
&x_1 &\sum(\hat y_i-\bar y)^2 &1 &\frac{\text{SS}_{x_1}}{\text{df}_{x_1}} &\frac{\text{MS}_{x_1}}{\text{MS}_{\rm res}} \\
&\text{Residual} &\sum(y_i-\hat y_i)^2 &N-(1+1) &\frac{\text{SS}_{\rm res}}{\text{df}_{\rm res}} \\
&\text{Total} &\sum(y_i-\bar y)^2 &N-1
\end{array}
Here $\bar y$ is the mean of $y$, $y_i$ is the observed value of $y$ for unit (e.g., patient) $i$, $\hat y_i$ is model's predicted value for unit $i$, and $N$ is the total number of units in the study. If you have a multiple regression model with two orthogonal covariates, the ANOVA table might be constructed like so:
\begin{array}{lllll}
&\text{Source} &\text{SS} &\text{df} &\text{MS} &\text{F} \\
\hline
&x_1 &\sum(\hat y_{x_{1i}\bar x_2}-\bar y)^2 &1 &\frac{\text{SS}_{x_1}}{\text{df}_{x_1}} &\frac{\text{MS}_{x_1}}{\text{MS}_{\rm res}} \\
&x_2 &\sum(\hat y_{\bar x_1x_{2i}}-\bar y)^2 &1 &\frac{\text{SS}_{x_2}}{\text{df}_{x_2}} &\frac{\text{MS}_{x_2}}{\text{MS}_{\rm res}} \\
&\text{Residual} &\sum(y_i-\hat y_i)^2 &N-(2+1) &\frac{\text{SS}_{\rm res}}{\text{df}_{\rm res}} \\
&\text{Total} &\sum(y_i-\bar y)^2 &N-1
\end{array}
Here $\hat y_{x_{1i}\bar x_2}$, for example, is the predicted value for unit $i$ if its observed value for $x_1$ was its actual observed value, but its observed value for $x_2$ was the mean of $x_2$. Of course, it is possible that $\bar x_2$ is the observed value of $x_2$ for some observation, in which case there are no adjustments to be made, but this won't typically be the case. Note that this method for creating the ANOVA table is only valid if all variables are orthogonal; this is a highly simplified case created for expository purposes.
If we are considering the situation where the same data are used to fit a model both with and without $x_2$, then the observed $y$ values and $\bar y$ will be the same. Thus, the total SS must be the same in both ANOVA tables. In addition, if $x_1$ and $x_2$ are orthogonal to each other, then $SS_{x_1}$ will be identical in both ANOVA tables as well. So, how is it that there can be sums of squares associated with $x_2$ in the table? Where did they come from if the total SS and $SS_{x_1}$ are the same? The answer is that they came from $SS_\text{res}$. The $\text{df}_{x_2}$ are also taken from $\text{df}_\text{res}$.
Now the $F$-test of $x_1$ is the $MS_{x_1}$ divided by $MS_\text{res}$ in both cases. Since $MS_{x_1}$ is the same, the difference in the significance of this test comes from the change in $MS_\text{res}$, which has changed in two ways: It started with fewer SS, because some were allotted to $x_2$, but those are divided by fewer df, since some degrees of freedom were allotted to $x_2$, as well. The change in the significance / power of the $F$-test (and equivalently the $t$-test, in this case) is due to how those two changes trade off. If more SS are given to $x_2$, relative to the df that are given to $x_2$, then the $MS_\text{res}$ will decrease, causing the $F$ associated with $x_1$ to increase and $p$ to become more significant.
The effect of $x_2$ does not have to be larger than $x_1$ for this to occur, but if it is not, then the shifts in $p$-values will be quite small. The only way it will end up switching between non-significance and significance is if the $p$-values happen to be just slightly on both sides of alpha. Here is an example, coded in R
:
x1 = rep(1:3, times=15)
x2 = rep(1:3, each=15)
cor(x1, x2) # [1] 0
set.seed(11628)
y = 0 + 0.3*x1 + 0.3*x2 + rnorm(45, mean=0, sd=1)
model1 = lm(y~x1)
model12 = lm(y~x1+x2)
anova(model1)
# ...
# Df Sum Sq Mean Sq F value Pr(>F)
# x1 1 5.314 5.3136 3.9568 0.05307 .
# Residuals 43 57.745 1.3429
# ...
anova(model12)
# ...
# Df Sum Sq Mean Sq F value Pr(>F)
# x1 1 5.314 5.3136 4.2471 0.04555 *
# x2 1 5.198 5.1979 4.1546 0.04785 *
# Residuals 42 52.547 1.2511
# ...
In fact, $x_2$ doesn't have to be significant at all. Consider:
set.seed(1201)
y = 0 + 0.3*x1 + 0.3*x2 + rnorm(45, mean=0, sd=1)
anova(model1)
# ...
# Df Sum Sq Mean Sq F value Pr(>F)
# x1 1 3.631 3.6310 3.8461 0.05636 .
# ...
anova(model12)
# ...
# Df Sum Sq Mean Sq F value Pr(>F)
# x1 1 3.631 3.6310 4.0740 0.04996 *
# x2 1 3.162 3.1620 3.5478 0.06656 .
# ...
These are admittedly nothing like the dramatic example in @whuber's post, but they may help people understand what is going on here.