Police said the speedboat carrying about three dozen passengers from the town of Mawa rammed into the other vessel in the Padma river as it neared the main river station in the central rural town of Shibchar.
"We have so far recovered 26 bodies including a woman. We have also rescued five injured people including three children," police official Amir Hossain told AFP.
Hossain said the bow of the passenger boat was destroyed when the speedboat smashed into the side of the transport vessel, sinking in the river in minutes.
"Police, the fire brigade and army rescue teams are on the spot, conducting search and rescue work," he said.
Witness Abdur Rahman said there was a loud noise when the boats collided and the vessels then overturned.
"When we rushed to the spot we found the speedboat torn into two pieces. Hundreds of villagers immediately started conducting rescue work before they were joined by police and the fire brigade," he said.
Bangladesh is building the country's largest road and railway bridge near the accident spot and police said officers were immediately at the scene.
Construction work has slowed ferry transport on the river, prompting many to take the journey on less safe speedboats, which take only about 15 minutes to make the crossing in contrast to up to two hours on safer ferries.
The government administrator of Shibchar district said up to five people were believed to be missing.
He said the driver of the speedboat would be investigated as he appeared to have hit the transport vessel, which was moored at the time.
"A probe has been ordered into the accident," he said.
Maritime accidents are common in Bangladesh, a delta nation crisscrossed by hundreds of rivers.
Experts blame poor maintenance, lax safety standards at shipyards and overcrowding for many of the accidents.
Vessels transporting sand sit low in the water and can be hard to see in choppy conditions, particularly when light is poor.
In early April, more than 30 people died when a packed ferry with around 50 passengers hurrying home from the central city of Narayanganj ahead of an impending coronavirus lockdown collided with a larger cargo vessel.
In June last year, a ferry sank in Dhaka after it was hit from behind by another ferry, killing at least 32 people.
In February 2015, at least 78 people died when an overcrowded ship collided with a cargo boat.
More about: Bangladesh