From what I know about this the Western Railroad workers were Chinese immigrants who came to California, most were Cantonese since Canton province was on the southern coast of China and was a convenient location from which to sail to America. As Canton was overpopulated at the time and with the Qing in decline due to the Opium Wars and foreign settlements there was a lot of poverty in China that drove many to immigrate. Their arrival in the US in the mid-1800's coincided with a labor shortage:
In early 1865 the Central Pacific had work enough for 4,000 men. Yet contractor Charles Crocker barely managed to hold onto 800 laborers at any given time. Most of the early workers were Irish immigrants. Railroad work was hard, and management was chaotic, leading to a high attrition rate. The Central Pacific management puzzled over how it could attract and retain a work force up to the enormous task. In keeping with prejudices of the day, some Central Pacific officials believed that Irishmen were inclined to spend their wages on liquor, and that the Chinese were also unreliable. Yet, due to the critical shortage, Crocker suggested that reconsideration be given to hiring Chinese. He encountered strong prejudice from foreman James Harvey Strobridge.
You can read more on them here: Chinese Railroad Workers - American Experience
There were indeed construction companies that also hired workers, which were hard to find as Irish workers at the time were becoming in short supply as noted above. What aided the railroads in the late 1800's was the ending of the Civil War, where suddenly many soldiers were de-enlisted and needed to find work. Many shifted west and took on the labor for building the railroads from the mid-west towards the west coast. There were ads placed in papers to bring the Irish towards the mid-west both for settlement and labor, they did build many of the railroads East of the Mississippi, an interesting overview of Irish immigration and this is in this article on the Molly Maguires.
I know I have more at home or somewhere, I'll add later when I get a chance.